在Visual Studio 2010 C++中,我讀取argv [0]以獲取工作目錄。Visual C++ 2010:argv [0]是調試模式下的完整路徑,但是發佈模式下只有.exe名稱
在調試模式下,它肯定是顯示該目錄的完整路徑和EXE文件名本身(如預期)
在發行模式下,它不僅具有程序.exe名稱,而不是完整的工作路徑。
- 爲什麼呢?
- 如何獲取工作目錄?
在Visual Studio 2010 C++中,我讀取argv [0]以獲取工作目錄。Visual C++ 2010:argv [0]是調試模式下的完整路徑,但是發佈模式下只有.exe名稱
在調試模式下,它肯定是顯示該目錄的完整路徑和EXE文件名本身(如預期)
在發行模式下,它不僅具有程序.exe名稱,而不是完整的工作路徑。
MSVC會將用於啓動可執行文件的命令放入argv[0]
- 這與當前工作目錄無關。
例如,如果用於發射foo.exe
命令是:
foo
,我發現通過搜索路徑的可執行文件,argv[0]
將foo
c:\foos-dir\foo
,(路徑將不搜索)argv[0]
將c:\foos-dir\foo
foo.exe
,argv的[0]將是foo.exe
等
你或許應該得到使用the Win32 GetCurrentDirectory()
API或the _getcwd()
runtime function當前工作目錄。
下面是使用GetCurrentDirectory()
一個簡單的例子:
TCHAR buffer[128];
DWORD const buffer_chars = sizeof(buffer)/sizeof(buffer[0]);
DWORD result = GetCurrentDirectory(buffer_chars, buffer);
if ((result == 0) || (result >= buffer_chars)) {
puts("problem getting the working directory");
exit(1);
}
printf("Current working directory: %s\n", buffer);
謝謝。我試圖使用GetCurrentDirectory並失敗。當我做下面的事情時,它給了我訪問衝突: \t LPWSTR whatever =(LPWSTR)「」; \t int ret = GetCurrentDirectory(4096,whatever); – pete 2012-03-19 18:41:28
你的'whatever'指針指向一個不可修改的緩衝區(它是一個字符串文字),更不用說與'4096'的大小有關。我將用一個使用'GetCurrentDirectory()'的簡短例子來更新答案。 – 2012-03-19 19:13:42
您應該使用MAX_PATH而不是硬編碼128。 此外,Visual C++定義_countof()來確定靜態數組的大小。 (保存你的緩衝區/緩衝區[0]語法。) – 2012-03-20 05:35:04
我或許應該使用的Windows – pete 2012-03-19 18:10:15
黨的GetCurrentDirectory功能,沒有工作 – pete 2012-03-19 18:15:08
出於某種原因,這兩個GetCurrentDirectory和GetModuleFileName是造成訪問衝突。 – pete 2012-03-19 18:23:57