这是非常简单的,只是为了让程序运行,所以我可以调试更复杂的部分:
//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的调试可执行文件,它将打开文件(存储在同一目录中),其余的该程序很好地哼唱(直到它到达我实际想要调试的有缺陷的部分,无论如何)。
但是,如果我尝试开始调试&#39;从VS2013内部,上述失败;它打印错误并立即关闭。程序在调试模式下执行的cmd窗口当然显示标题区域中的目录,它绝对是同一个目录,但我想它正在其他地方寻找文件。我尝试将它复制到卷根,没有欢乐。我确信这在VS的早期版本中运行得很好,但也许我只是在这里进行大脑放屁。有什么想法吗?
答案 0 :(得分:6)
在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)
。
也许最好,您可能希望将数据文件移动到项目源目录中,因为它不是构建工件。