2017-07-06 63 views
0

我認爲這是一個簡單的問題,但我不知道如何去做。我有一個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()'。 –

回答

0

我認爲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