1. 程式人生 > >52.文件讀取多一位的情況解決

52.文件讀取多一位的情況解決

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.文件讀取多一位的情況解決