c++ - 为什么我的程序在VS2013中调试时打不开文件?

标签 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 执行调试可执行文件,它将打开文件(存储在同一目录中)和其余文件程序的一部分很好地嗡嗡作响(直到它到达我真正想要调试的错误部分,无论如何)。

但是,如果我尝试从 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/

相关文章:

c# - 设置 Visual Studio 的环境变量以调试项目

c++ - 如何在 Visual Studio 中静态链接 FreeType2?

c# - 避免手动编写类似代码的简单方法

调试 Laravel 5 工匠迁移意外 T_VARIABLE FatalErrorException

c - 嵌入式系统调试——我应该使用输出/日志文件吗?

C++ 整数后跟 char 被接受为输入

c++ - 将遗留的 c 枚举包装到 c++11 枚举类

c++ - 实际函数调用计数与 EXPECT_CALL 不匹配

c++ - 是否可以为 ARM 和 THUMB 生成单独的 .exe 文件?

c - 在 Windows CLion 中显示静态 ASCII 数据(如诅咒)?