2017-05-08 32 views
-2

假設我的程序需要訪問文件夾'文件'中的某個文件,該文件當前存儲在文件夾中。在Visual Studio中,我可以將當​​前工作目錄指定爲'bin',因此如果我使用Visual Studio運行我的代碼,則可以按名稱訪問文件夾文件,而無需任何其他文件路徑信息。例如。C++:查找某個文件夾,無論我是從IDE運行程序還是作爲獨立可執行文件

std::ifstream file; 
file.open("Files\\someFile.txt"); 

但是,如果我作爲一個獨立的可執行文件運行我的程序,那麼當然它將無法找到文件。這是一個問題,因爲我打算將其作爲獨立可執行文件進行測試。

處理這種情況的常用方法是什麼?

回答

1

您可以保存在註冊表的路徑。在您的開發系統上,您可以手動將密鑰添加到包含路徑的註冊表中,並且在您釋放軟件時,可以使用安裝程序將該密鑰設置爲任何您需要的值。查看this link from the Microsoft web page以瞭解如何使用註冊表。

如果您知道您的文件總是位於您的可執行文件所在的文件夾中,那麼您還可以使用the windows API functionGetModuleFileName來檢索可執行文件的路徑。有時候,這是像一個預編譯集團連接有用:

#ifdef STANDALONE 
... GetModuleFileName ... 
#else 
... [open hard coded path] ... 
#endif 

STANDALONE是當你要測試的IDE之外的軟件,它可以定義一個宏。

0

在程序中使用相對路徑時,基本上要求操作系統相對於當前工作目錄搜索它。不是從可執行文件的目錄。因此,如果您的可執行文件位於以下位置C:\a\out.exe,並且您在C:\b中用..\a\out.exe調用它,那麼您的工作目錄仍然是C:\b
這是從Visual Studio運行時(默認情況下)發生的情況。 您可以在項目設置 - 配置屬性/調試中更改它。改變工作目錄從$(ProjectDir)$(TargetDir)


UPD。

約這裏MSVC項目宏更多信息:https://msdn.microsoft.com/en-us/library/c02as0cs.aspx

+0

那麼TargetDir到底是什麼? –

+0

@Jimmy_Rustle'$(TargetDir)'被設置爲您的目標的目錄。目標是你的情況下的可執行文件。您可以在配置屬性/常規中查看有關當前目標設置的更多信息 – teivaz

相關問題