新聞中心
場景說明
協(xié)助同事解決fopen打開文件永遠(yuǎn)返回-1的異常情況。在解決問題的時候,先入為主的認(rèn)為是:文件路徑出現(xiàn)了字符轉(zhuǎn)義的問題,根本沒有想到要打印出當(dāng)前無法獲取到文件句柄的錯誤,是否是文件路徑不存在。所以一開始就是將\替換為/,然后替換為\\,還是不行。
單獨(dú)寫最簡單的測試程序,沒有問題。懷疑是Unicode編碼的問題,也排除了。這時候就開始百度fopen失敗的原因獲取。剛開始的時候準(zhǔn)備使用GetLastError函數(shù),但是不能夠確定是否是專屬用于windows API,所以繼續(xù)百度下面的結(jié)果:
fprintf(stderr, "%s \n",strerror(errno));結(jié)果沒有任何的效果
如下是一段有用的信息:
fopen內(nèi)部用了CreateFile函數(shù),所以fopen調(diào)用失敗的情況下,也可以使用GetLastError查看錯誤代碼。
解決方案:
打開文件失敗,調(diào)用GetLastError()函數(shù),獲取到DWORD的值是32,然后打開工具,選擇查看錯誤碼:進(jìn)程無法訪問文件,因為另一個程序正在訪問該文件。通過查看所有的關(guān)于該文件的引用,果然發(fā)現(xiàn)確實已經(jīng)有地方打開編輯該文件。
反思:如果是字符轉(zhuǎn)義,肯定就是無法打開一個不存在的文件,只要通過獲取錯誤碼就可以解決這個問題。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前名稱:fopen打開文件失敗過程分析-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://fisionsoft.com.cn/article/goesh.html