【问题标题】:Visual Studio FilenamesVisual Studio 文件名
【发布时间】:2017-12-10 14:09:12
【问题描述】:

我认为这是一个简单的问题,但我不知道该怎么做。我有一个 C++ 项目,我正在 Windows 上编译和运行,但我遇到了我正在使用的 NiTE2 库的问题。当 NiTE2 调用设置所需的特定函数时,它会搜索位于“./NiTE2/s.dat”的“s.dat”文件。问题是当我在 Visual Studio 环境中运行它时,它会尝试搜索路径“.\NiTE2/s.dat”。这不是错字,它混合了斜线。可以理解,该程序找不到必要的文件。但是,当我在 Git Bash 下运行我的程序时,它执行得很好。

使用 Git Bash 可以工作,但调试非常困难,有谁知道如何或是否可以让 Visual Studio 运行时环境使用正斜杠而不是 Windows 默认的反斜杠作为路径?定义在何处找到“s.dat”的路径隐藏在我无法编辑的专有代码中,因此解决方案已失效。

旁注:如果有帮助的话,我正在运行 Windows 10。我正在尝试使用 VSCode 进行 bash 调试,但目前这也是一场艰苦的战斗。

【问题讨论】:

  • 混合斜线在 Windows 上工作得很好。找不到文件当然是非常常见的,默认工作目录是最糟糕的全局变量。只是不要使用相对路径,从程序的安装目录创建一个完整路径,这样无论你把它放在哪里都可以工作,并且根本不依赖配置。
  • @HansPassant 我同意你的观点,即相对路径是一个糟糕的主意我总是在我的代码中使用绝对路径,但就像我提到的那样,我无法修改那部分代码。它被埋在 NiTE2 库中,我只有最终编译的版本。如果在 Windows 上混合斜杠是可以接受的,那么为什么它抱怨在 Visual Studio 环境中找不到文件,但在 git bash 和命令提示符下却很好?
  • 好吧,喂这只野兽,给它它想吃的东西。在代码中显式设置工作目录,以便您知道它始终是正确的。使用 SetCurrentDirectory() 或 _chdir()
  • @HansPassant 我不知道这个功能,谢谢!这感觉很不对劲,但它解决了我的问题,我现在可以成功调试了。
  • 您还可以通过项目设置告诉 Visual Studio,当从 IDE 运行程序时,哪个目录应该是当前目录:Configuration Properties | Debugging | Working Directory

标签: c++ windows visual-studio visual-studio-2010 filepath


【解决方案1】:

我认为 Visual Studio 选择了一个意外的工作目录,如果您编辑该工作目录,它应该可以正常工作。

为了解决这个问题,我使用了系统内部procmon 工具。当我运行我的应用程序时,会显示尝试的文件的完整路径。

Visual Studio 在一个奇怪的工作目录(源位置)中启动应用程序,这可能是在调试器中运行时丢失文件的主要原因。

您可以通过转到解决方案资源管理器中的 .exe 位置,右键单击以编辑属性,然后选择“调试”配置属性来更改调试器的起始目录。

在这里您可以设置命令参数 - 作为文本发送到程序和工作目录。

Windows 有 2 个路径解析器。本机 NT 路径解析器不接受 /,但有一个 DOS 解析器可以被激活。 DOS 解析器的不同之处在于:-

  • 不关心“\”或“/”
  • 允许相对搜索c:\program files\myApp\..\yourapp\prog.exe
  • 不关心连续的'\'或'//'
  • 关于文件末尾的空格有一些奇怪的规则。 (DOS 解析器无法打开此类)。

使用 '\?' 打开文件时可以禁用 DOS 解析器附加到路径并使用函数的 unicode 变体。

wfopen( L"\\\\?\\c:\\program files\\yourapp\\prog.exe", L"rb" );

所以在正常操作中,'\' 和 '/' 是等价的,除非 DOS 解析器被禁用。

【讨论】:

  • 这就是我要找的。我知道这很简单,但我不知道如何让 Visual Studio 使用 .exe 文件的位置。感谢@mksteve 对它如何处理文件路径解析进行了详尽的分解。
猜你喜欢
  • 1970-01-01
  • 2013-03-17
  • 2010-12-03
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
相关资源
最近更新 更多