您好,登錄后才能下訂單哦!
場景說明
協(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è)問題。
免責(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)容。