c語言基礎學習10_關於文件操作的複習

============================================================================= 如果一個程序只調用fopen,而不調用fclose。會導致兩個結果:

(1)一個程序同時可以打開的文件數量是有限的,如果超過系統限制,那麼打開文件會失敗。 (2)一個fopen會佔用一些內存,多個就會對內存消耗很大。 所以記得fopen使用完文件後要及時的fclose。 而且使用fclose後,能把緩衝區裏面的數據同步到磁盤裏面去。 ============================================================================= 二進制文件和文本文件的區別:

1、在windows系統中的文本模式下,文件是以"\r\n"代表換行的。 若以文本模式打開文件,並使用fputs等函數寫入換行符"\n"時,函數會自動在"\n"前面加上"\r"。即實際寫入文件的是"\r\n"。

2、在類似於Unix/Linux系統中的文本模式下,文件是以"\n"代表換行的。 所以在Linux系統中文本模式和二進制模式並無區別。

3、在windows系統下讀寫文本文件的時候,是不寫b的;但讀寫二進制文件的時候一定要寫b的。

4、Linux系統下,b是忽略的。 ============================================================================= 不要直接操作fopen返回的文件指針,這個指針只是給c語言庫函數的參數使用的。(因爲該指針裏面很複雜。) 如果程序員不聽話,直接操作這個指針,可能會帶來很多問題。(除非你特別特別熟悉這個指針。) 原因之一:因爲FILE裏面的成員在不同的系統是不一樣的。 ============================================================================= 文本文件的結尾標示是EOF,但二進制文件不是,所以可以用EOF判斷文件文件是否結尾,但二進制文件就需要用feof這個函數了。 爲什麼呢? 答:因爲所有文本文件都是ASCII值,而ASCII的值沒有負的(即-1),而二進制文件裏面就是普通的數,有正有負的數。 ============================================================================= 注意:fprintf,fscanf,fgets,fputs函數都是針對文本文件的,是針對行的讀寫函數。 ============================================================================= 假設這次讀了100個字節。 fread(buf, 1, 100, p); //返回值是100 要求是:一個單位是1個字節,一次讀100個單位,讀的達到了100個單位,所以返回值是100。 fread(buf, 100, 1, p); //返回值是1 要求是:一個單位是100個字節,一次讀1個單位,讀的達到了1個單位,所以返回值是1。

假設這次讀了10個字節。 fread(buf, 1, 100, p); //返回值是10 要求是:一個單位是1個字節,一次讀100個單位,讀的只達到了10個單位,所以返回值是10。 fread(buf, 100, 1, p); //返回值是1 要求是:一個單位是100個字節,一次讀1個單位,讀的沒有達到1個單位,所以返回值是0。

以上這兩種寫法,是否第二種效率高呢?答:效率是一樣的,唯一的不同點是返回值不同。即:返回值取決於讀了幾個單位。 ============================================================================= 把一個結構變量寫入文件的時候,結構變量成員的對齊方式所導致的內存浪費部分同樣也會寫入文件。 ============================================================================= c語言文件讀寫的庫函數都是自動維護FILE裏面的相關成員,包括文件讀寫當前位置。 例如:每次調用fgets,或者fread後,下次再調用該函數的時候,就會自動從已讀取內容的後面開始。 ----------------------------------------------------------------------------- feof函數爲什麼能知道是否到了文件結尾了呢? 答:因爲fread或者fgets這些函數如果讀完了文件的所有內容,他們會設置FILE裏面相關變量的值。 而feof函數只是判斷FILE結構裏面相關變量的值是否爲文件已經結尾狀態。 ============================================================================= fopen成功打開一個文件後,文件指針都是在( #define SEEK_SET 0 )這個位置。 ============================================================================= 注意: 文件拷貝時,通常的時候操作系統會把buf設置爲64K大小。 文件讀寫時,c語言庫函數設置的buf大小爲4K。 =============================================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章