52.文件讀取多一位的情況解決
阿新 • • 發佈:2018-02-05
nbsp class 這一 復制 () 就會 文件復制 末尾 函數
- 用feof讀取總是會多讀取一位. “C”語言的“feof()”函數和數據庫中“eof()”函數的運作是完全不同的。數據庫中“eof()”函數讀取當前指針的位置,“C”語言的“feof()”函數返回的是最後一次“讀操作的內容”。多年來把“位置和內容”相混,從而造成了對這一概念的似是而非。 那麽,位置和內容到底有何不同呢?舉個簡單的例子,比如有人說“你走到火車的最後一節車箱”這就是位置。而如果說“請你一直向後走,摸到鐵軌結束”這就是內容。也就是說用內容來判斷會“多走一節”。這就是完全依賴於“while(!feof(FP)){...}”進行文件復制時,目標文檔總會比源文檔“多出一些”的原因。 總結起來就是feof就是多走一節才能判斷是不是到文件末尾,這樣就會造成多讀取一位.那麽這樣怎麽處理呢?
如果是讀寫文本操作:
1 while (!feof(pf)) 2 { 3 char ch = fgetc(pf); 4 5 if (ch != -1) 6 { 7 fputc(ch, pf2); 8 } 9 }
如果是讀寫二進制操作:
1 fseek(pf, 0, SEEK_END);//文件指針移動到末尾(結束的位置) 2 int length = ftell(pf);//獲取當前文件指針距離開頭的長度 3 4 fseek(pf, 0, SEEK_SET);//移動當前文件指針到開頭(開始的位置) 5 for (int i = 0; i < length; i++) 6 { 7 char ch = fgetc(pf); 8 fputc(ch, pf2); 9 }
52.文件讀取多一位的情況解決