程式設計中對於檔案路徑應該注意的問題

weixin_34198881發表於2019-01-08

在編碼工作中,難免會和檔案路徑打交道,而我們很多時候都會寫類似這樣的程式碼

 

fopen("Demo.txt", "wb+");


這樣寫的初衷是在想在程式目錄下讀寫Demo.txt檔案,在大多數時候這樣的程式碼沒有問題
但是在某些情況下,這樣填寫路徑是達不到預期效果的

比如我們在開發DLL檔案,想記錄一個配置檔案,該配置檔案應該和DLL在一個目錄下
那麼用上面的程式碼,這個檔案會和EXE檔案在一個目錄嗎?還是和DLL在一個目錄呢?


我們知道,在Windows的程式都有個“起始位置”的概念(隨便找個快捷方式,點右鍵屬性就能看到)
這個路徑可以和程式所在路徑不同,所以我又會有一個疑問:這會影響上面的程式碼執行嗎?

note:如果程式是隨Windows啟動的,那麼它的工作目錄會是System32目錄,應該注意這個問題

為了驗證這些問題,我做了個小測試,開發了一個DLL,匯出一個函式,只是簡單的建立一個文字檔案

 

void WINAPI test()
{
	FILE *fp = fopen("Demo.txt", "wt+");
	fputs("Hello", fp);
	fclose(fp);
}


然後開發一個EXE檔案,載入這個DLL並呼叫其匯出的函式,看看這個Demo.txt會生成在哪個目錄下
注意,為了讓程式的工作目錄和程式本身不在一個位置,可以通過cmd來啟動程式

EXE路徑:C:\Demo.exe
DLL路徑:D:\Demo.dll
程式的啟動路徑:E:\

執行EXE後,Demo.txt檔案出現在了E:\下面。

總結:
我們平常所說的程式目錄,意指.exe所在目錄。但是對於Windows來說,它並不會承認.exe所在路徑,而只認工作路徑
在程式碼中寫入一些非絕對路徑的引數時,應該知道,它是以程式的工作目錄為基準的

 

 

相關文章