这是非常简单的,只是为了让程序运行,这样我就可以调试更复杂的部分:
//open file
cout << "Input File Name: ";
string fileName;
cin >> fileName;
ifstream file;
file.open(fileName, ios_base::in);
if (!(file.good())){
cout << "File Open Error\n";
return 0;
}
程序编译正常。如果我通过双击或通过 cmd 浏览从\Projects\[this project]\Debug\[program].exe 执行调试可执行文件,它将打开文件(存储在同一目录中)和其余文件程序的一部分很好地嗡嗡作响(直到它到达我真正想要调试的错误部分,无论如何)。
但是,如果我尝试从 VS2013 中“开始调试”,上述操作将失败;它打印错误并立即关闭。程序在 Debug模式下执行的cmd窗口当然会在标题区显示目录,而且肯定是同一个目录,但我猜是在别的地方找文件。我也尝试将它复制到卷根目录,但没有任何乐趣。我确信这在早期版本的 VS 中工作得很好,但也许我只是在这里放屁。有什么想法吗?
最佳答案
在 Visual Studio 的项目属性中,您可以设置启动调试程序的当前目录。默认情况下,这被设置为 .vcxproj
文件的位置,即它不是可执行文件的位置。
同时,传递给 std
文件流构造函数的相对路径被解释为相对于程序的当前目录,这就是为什么它在调试时失败但在直接运行时不会失败的原因。如果您改为使用这些 cmd 命令启动程序:
>cd some\random\dir
>C:\path\to\your\Projects\[this project]\Debug\[program].exe
它会以完全相同的方式失败。
要在调试时修改 Visual Studio 使用的启动目录,请转至 Project > Properties > Configuration Properties > Debugging > Working Directory
。请注意,该设置是特定于配置的(即,您可以为每个配置设置不同的启动目录)。如果要将其设置为包含可执行文件的目录,可以使用宏$(OutDir)
。
也许您可能希望将数据文件移动到项目源目录中,因为它不是构建工件。
关于c++ - 为什么我的程序在VS2013中调试时打不开文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23334279/