Visual Studio文件名

问题描述:

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

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

边注:我运行Windows 10如果反正帮助英寸我试图让VSCODE工作时进行bash调试,但目前这也是一场艰苦的战斗。

+2

混合斜线在Windows上工作得很好。无法找到文件当然是非常普遍的,默认工作目录是最糟糕的全局变量。不要使用相对路径,从程序的安装目录创建一个完整的路径,这样无论放在哪里都可以工作,而且完全不依赖于配置。 –

+0

@HansPassant我同意你的观点,相对路径是一个糟糕的主意,我总是在我的代码中使用绝对路径,但正如我所提到的,我无法修改代码的那部分。这是埋在NiTE2库中,其中我只有最终的编译版本。如果混合斜线在Windows上可以接受任何其他想法,为什么它抱怨没有在Visual Studio环境中找到该文件,但在git bash和命令提示符下没有问题? – Wired365

+0

那么,喂食这只野兽并且给它吃它想要的东西。在你的代码中明确地设置工作目录,这样你就知道它总是正确的。使用SetCurrentDirectory()或'_chdir()'。 –

我认为Visual Studio是选择一个意想不到的工作目录,如果你编辑的工作目录,它应该只是罚款。

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

的Visual Studio开始在陌生的工作目录的应用程序(源的位置),这样就可以对文件丢失的重要原因,在调试器中运行时。

您可以更改要在Solution Explorer中的.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解析器被禁用。

+0

这就是我一直在寻找的。我知道这很简单,但我不知道如何让Visual Studio使用.exe文件的位置。感谢@ mksteve写下如何处理文件路径分析的细致分类。 – Wired365