天天看點

fopen打開檔案失敗過程分析

場景說明

        協助同僚解決fopen打開檔案永遠傳回-1的異常情況。在解決問題的時候,先入為主的認為是:檔案路徑出現了字元轉義的問題,根本沒有想到要列印出目前無法擷取到檔案句柄的錯誤,是否是檔案路徑不存在。是以一開始就是将\替換為/,然後替換為\\,還是不行。

        單獨寫最簡單的測試程式,沒有問題。懷疑是Unicode編碼的問題,也排除了。這時候就開始百度fopen失敗的原因擷取。剛開始的時候準備使用GetLastError函數,但是不能夠确定是否是專屬用于windows API,是以繼續百度下面的結果:

fprintf(stderr, "%s \n",strerror(errno));結果沒有任何的效果

如下是一段有用的資訊:

        fopen内部用了CreateFile函數,是以fopen調用失敗的情況下,也可以使用GetLastError檢視錯誤代碼。

解決方案:

    打開檔案失敗,調用GetLastError()函數,擷取到DWORD的值是32,然後打開工具,選擇檢視錯誤碼:程序無法通路檔案,因為另一個程式正在通路該檔案。通過檢視所有的關于該檔案的引用,果然發現确實已經有地方打開編輯該檔案。

反思:如果是字元轉義,肯定就是無法打開一個不存在的檔案,隻要通過擷取錯誤碼就可以解決這個問題。

    本文轉自fengyuzaitu 51CTO部落格,原文連結:http://blog.51cto.com/fengyuzaitu/1773995,如需轉載請自行聯系原作者