仅在 Visual Studio 外部运行时才找到文本文件

Posted

技术标签:

【中文标题】仅在 Visual Studio 外部运行时才找到文本文件【英文标题】:Text file only found when running outside of Visual Studio 【发布时间】:2012-01-04 07:09:45 【问题描述】:

我有一个项目(本机 C++ 编译为 .exe)在 VS 2010 之外运行良好,但在 VS 内部(有或没有调试器)它在试图查找位于相同的文本文件时卡住了bin 文件夹。

关于为什么会发生这种情况的任何想法?我的直觉是 VS 在尝试打开文件时会弄乱代码的外观,但我不知道足够的细节来纠正这个问题。

一些细节:

我的 .exe 从我之前编写的 .dll 调用一个函数,然后它会尝试找到一个指定该函数参数的文本文件。为方便起见,我将所有这些文件放在同一个文件夹中,因此查找文本文件不是问题。

在打开文件之前,该函数使用以下命令检查它是否存在:

PersistentAssert(Utility::FileExists(Filename), "Parameter file not found");

在 VS 2010 中,此行会导致显示“找不到参数文件”,但在 VS 之外,程序会设法找到该文件。

【问题讨论】:

【参考方案1】:

默认情况下,从 Visual Studio 启动可执行文件时,它使用项目文件目录作为当前工作目录。您可以在配置属性 -> 调试 -> 工作目录中更改它。

但是,我认为从当前工作目录中搜索您的程序数据文件等不是正确的行为。相反,您的程序应该找出可执行文件的目录并在该目录中找到文件。

【讨论】:

哇,一个更明确的答案。我必须更频繁地就这些标签提出问题......【参考方案2】:

进程具有“当前目录”的概念,它可能与.exe 文件所在的目录相同,也可能不同。听起来当您在 VS 中运行程序时,当前目录不是您的 .exe 所在的位置。

在项目设置的某个地方,应该有一个地方可以选择当您的程序在调试器中启动时哪个目录将成为当前目录。将其设置为与您的 .exe 相同的位置,您应该会很好。

【讨论】:

就是这样——有史以来最快的 SO 答案。谢谢!

以上是关于仅在 Visual Studio 外部运行时才找到文本文件的主要内容,如果未能解决你的问题,请参考以下文章

仅在 Visual Studio 中激活时才调用后台任务

Visual Studio 预处理器仅在设置 /P 时才有效

Visual Studio 代码分析 (fxCop) 仅在第一次构建后运行

使用Visual Studio将类库项目附加到外部应用程序

Visual Studio c++ 仅在调试模式下 LNK 1104 错误

WPF Focused Visual State 仅在按下按钮时才会启动,为啥?