2011-06-04 92 views
0

我維護一個程序,負責從數據採集系統收集數據並將該數據附加到非常大(大小> 4GB)的二進制文件中。在附加數據之前,程序必須驗證此文件的頭文件,以確保文件中的元數據與已收集的元數據匹配。爲了做到這一點,我打開文件如下:什麼會導致將數據附加到文件失敗?

data_file = fopen(file_name,「rb +」);

然後我尋找文件的開始,以驗證標題。當這樣做時,我尋求文件結尾如下:

_fseeki64(data_file,_filelengthi64(data_file),SEEK_SET);

此時,我編寫使用fwrite()收集的數據。我小心地檢查所有I/O函數的返回值。

我們一直在測試該程序的計算機之一(Windows 7 64位)間歇性地顯示了數據似乎已寫入文件,但文件的上次更改時間和文件大小均未更改的情況。如果任何對fopen(),fseek()或fwrite()的調用失敗,我的程序將拋出異​​常,這將導致數據收集過程中止並記錄錯誤。在這臺機器上,這些故障似乎都沒有發生。讓事情更加神祕的事情是,如果在主機文件系統上設置了還原點,問題就會消失,只會在未來某個時間間歇性地重新出現。

我們試圖在其他機器上(vista 32位操作系統)重現此問題,但在複製該問題方面沒有成功(這並不一定意味着什麼,因爲問題首先是如此間歇。

有類似這樣其他人遇到什麼?是否有一個潛在的補救措施?

更多信息

我現在已經發現,當fflush()被調用的文件和所發生的故障win32錯誤是b由GetLastError()返回的eing爲665(ERROR_FILE_SYSTEM_LIMITATION)。搜索谷歌這個錯誤會導致一堆與SQL服務器文件的「範圍」有關的報告。我懷疑文件系統正在報告某種日誌記錄資源,這是因爲我們正在通過打開它來增加一個大文件,附加一大塊數據並關閉它。我現在正在尋求理解這個特定的錯誤,希望能提出有效的補救措施。

+0

回答你說「數據似乎已寫入文件」。該文件是否按預期進行了修改,然後 - 雖然大小/修改日期沒有反映這一點? – 2011-06-04 13:41:44

+0

不,我的意思僅僅是來自fwrite()的返回值表示數據已成功寫入。 – 2011-06-06 12:58:58

回答

相關問題