C 檔案讀寫 容易疏忽的乙個問題

2021-09-06 13:12:17 字數 2051 閱讀 7254

今天需要解決乙個問題,將影像瓦片(一堆jpg檔案)分別進行讀取,並將所有資料以檔案流的方式存入乙個.db的檔案中,

同時將每個jpg資料在db檔案中的位置儲存下來,作為index存在.idx檔案中。

其中部分**如下(沒有copy fopen和fclose的部分):

1     char buf[256];

for (int i = 0; i < levels; i++)

2for (int x = 0; x < imagelevels[i][0]; x++)//縱向3

for (int y = 0; y < imagelevels[i][1]; y++)//橫向4

12 fseek(fp,0

,seek_end);

1314

//seek到檔案結尾 將該位置tell出來 即為檔案大小

這段**有沒有錯誤?  或許你一眼就看出來了,可是當局者迷,當時我除錯很久才發現,具體錯誤後面再說。

先總結乙個技巧:如何獲取檔案大小?

這裡介紹幾種辦法:

1、通過fseek函式:

fseek(fp,0

,seek_end);

size_t size = ftell(fp);

2、使用_stat()函式,需要包含標頭檔案

3、利用filelength函式

1 file* file = fopen(filepath, "rb"

); 2if

(file)

3

4、利用cfile類的函式

cfile cfile;   

if(cfile.open(filepath, cfile::moderead))

5、利用控制代碼和createfile函式

handle handle = createfile(filepath, file_read_ea, file_share_read, 0, open_existing, 0, 0

);

if (handle !=invalid_handle_value)

個人比較偏愛前兩種方法。

好了 ,該說說我的錯誤了。看看的第一段**的第十行,第三個引數。懂了吧,其實是很簡單的錯誤,但是體現出我對於函式變數的了解和控制能力欠缺火候。

fwrite(buf,sizeof(char),hr,fdb);

問題雖然很小,但是程式設計的時候,很多問題和這種類似,我是用二進位制檔案檢視寫出來的檔案很久之後,才發現位置有偏移。

開始我懷疑是windows寫入時候做了優化,將檔案偏移到每個block的開頭位置,可是我的結果檔案只有乙個.db檔案,不應該會被優化。

後來才發現自己的疏忽,mark~

讀寫同乙個檔案出問題

在c primer plus 第六版中的第十三章程式設計練習第3題出現了問題。題目 編寫乙個檔案拷貝程式,提示使用者輸入文字檔案名,並以該檔名作為源檔名和輸出檔名。該程式要使用ctype.h中的toupper 函式,在寫入到輸出檔案時把所有文字轉換成大寫。使用標準的i o和文字模式。我一開始就只建立...

C 乙個簡單並且實用的檔案讀寫

c 的檔案操作博大精深,在此,我只介紹乙個非常實用並且簡短的操作方法。首先標頭檔案必不可少即 include。其次 建立或者開啟乙個檔案需要 ifstream if1 d 檔案.dat 通過seekg 方法來定位檔案指標的位置 if1.seekg 0 ios end 即把檔案指標定位在檔案的末尾然後...

乙個基礎的檔案讀寫(複習)

乙個基礎的檔案讀寫,由於上傳原因,的格式不太好,僅供參考,編寫測試均成功,僅供參考 include include include include include include int main int argc,char argv char writebuf 20 i love linux 第一...