您好,登錄后才能下訂單哦!
場景說明
協助同事解決fopen打開文件永遠返回-1的異常情況。在解決問題的時候,先入為主的認為是:文件路徑出現了字符轉義的問題,根本沒有想到要打印出當前無法獲取到文件句柄的錯誤,是否是文件路徑不存在。所以一開始就是將\替換為/,然后替換為\\,還是不行。
單獨寫最簡單的測試程序,沒有問題。懷疑是Unicode編碼的問題,也排除了。這時候就開始百度fopen失敗的原因獲取。剛開始的時候準備使用GetLastError函數,但是不能夠確定是否是專屬用于windows API,所以繼續百度下面的結果:
fprintf(stderr, "%s \n",strerror(errno));結果沒有任何的效果
如下是一段有用的信息:
fopen內部用了CreateFile函數,所以fopen調用失敗的情況下,也可以使用GetLastError查看錯誤代碼。
解決方案:
打開文件失敗,調用GetLastError()函數,獲取到DWORD的值是32,然后打開工具,選擇查看錯誤碼:進程無法訪問文件,因為另一個程序正在訪問該文件。通過查看所有的關于該文件的引用,果然發現確實已經有地方打開編輯該文件。
反思:如果是字符轉義,肯定就是無法打開一個不存在的文件,只要通過獲取錯誤碼就可以解決這個問題。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。