溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

fopen打開文件失敗過程分析

發(fā)布時(shí)間:2020-07-27 10:43:57 來源:網(wǎng)絡(luò) 閱讀:6446 作者:fengyuzaitu 欄目:編程語言

場景說明

        協(xié)助同事解決fopen打開文件永遠(yuǎn)返回-1的異常情況。在解決問題的時(shí)候,先入為主的認(rèn)為是:文件路徑出現(xiàn)了字符轉(zhuǎn)義的問題,根本沒有想到要打印出當(dāng)前無法獲取到文件句柄的錯(cuò)誤,是否是文件路徑不存在。所以一開始就是將\替換為/,然后替換為\\,還是不行。

        單獨(dú)寫最簡單的測試程序,沒有問題。懷疑是Unicode編碼的問題,也排除了。這時(shí)候就開始百度fopen失敗的原因獲取。剛開始的時(shí)候準(zhǔn)備使用GetLastError函數(shù),但是不能夠確定是否是專屬用于windows API,所以繼續(xù)百度下面的結(jié)果:

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

如下是一段有用的信息:

        fopen內(nèi)部用了CreateFile函數(shù),所以fopen調(diào)用失敗的情況下,也可以使用GetLastError查看錯(cuò)誤代碼。


解決方案:

    打開文件失敗,調(diào)用GetLastError()函數(shù),獲取到DWORD的值是32,然后打開工具,選擇查看錯(cuò)誤碼:進(jìn)程無法訪問文件,因?yàn)榱硪粋€(gè)程序正在訪問該文件。通過查看所有的關(guān)于該文件的引用,果然發(fā)現(xiàn)確實(shí)已經(jīng)有地方打開編輯該文件。


反思:如果是字符轉(zhuǎn)義,肯定就是無法打開一個(gè)不存在的文件,只要通過獲取錯(cuò)誤碼就可以解決這個(gè)問題。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI