为什么我的程序在VS2013中调试时无法打开文件?

时间:2014-04-28 06:47:27

标签: c++ visual-studio debugging file-io

这是非常简单的,只是为了让程序运行,所以我可以调试更复杂的部分:

//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的早期版本中运行得很好,但也许我只是在这里进行大脑放屁。有什么想法吗?

1 个答案:

答案 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)

也许最好,您可能希望将数据文件移动到项目源目录中,因为它不是构建工件。