繁体   English   中英

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

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

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

//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中“开始调试”,则上述操作失败; 它打印错误并立即关闭。 程序在调试模式下执行的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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM