今天需要解決乙個問題,將影像瓦片(一堆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 第一...