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

Why can't my program open a file when debugging in VS2013?

本文关键字:文件 调试 程序 我的 VS2013 为什么      更新时间:2023-10-16

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

//open file
cout << "Input File Name: ";
string fileName;    
cin >> fileName;
ifstream file;  
file.open(fileName, ios_base::in);
if (!(file.good())){
    cout << "File Open Errorn";        
    return 0;
}

这个程序编译得很好。如果我只需双击或通过cmd浏览,就可以从\Projects\[this project]\debug\[program].exe执行调试可执行文件,它将打开文件(存储在同一目录中),程序的其余部分也会很好地运行(无论如何,直到它到达我真正想要调试的有缺陷的部分)。

但是,如果我尝试从VS2013中"启动调试",则以上操作失败;它打印错误并立即关闭。程序在调试模式下执行的cmd窗口当然会在标题区显示目录,而且它肯定是同一个目录,但我猜它在其他地方寻找文件。我也试着把它复制到卷根,没有乐趣。我确信这在早期版本的VS中运行得很好,但也许我只是在脑子里放屁。有什么想法吗?

在Visual Studio的项目属性中,可以设置启动调试程序的当前目录。默认情况下,这被设置为.vcxproj文件的位置,即它是而不是可执行文件的位置。

同时,传递给std文件流构造函数的相对路径是相对于程序的当前目录来解释的,这就是为什么它在调试时会失败,而在直接运行时不会失败。如果您使用以下cmd命令启动程序:

>cd somerandomdir
>C:pathtoyourProjects[this project]Debug[program].exe

它也会以完全相同的方式失败。

要修改Visual Studio在调试时使用的启动目录,请转到Project > Properties > Configuration Properties > Debugging > Working Directory。请注意,该设置是特定于配置的(即,每个配置可以有不同的启动目录)。如果要将其设置为包含可执行文件的目录,可以使用宏$(OutDir)

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