C语言-文件操作总结
目錄
- 1 fopen文件操作方式
- 1.1 打開文件fopen
- 1.2 關(guān)閉文件fclose
- 2 向文件讀寫字符
- 2.1 讀字符fgetc
- 2.2 寫字符fputc
- 3 向文件讀寫字符串
- 3.1 讀字符串fgets
- 3.2 寫字符串fputs
- 4 格式化方式讀寫文件
- 4.1 格式化寫fprintf
- 4.2 格式化讀fscanf
- 5 二進制向文件讀寫一組數(shù)據(jù)
- 5.1 二進制讀fread
- 5.2 二進制寫fwrite
- 6 隨機讀寫數(shù)據(jù)文件
- 6.1 指向文件開頭rewind
- 6.2 改變位置fseek
- 6.3 測定當前位置ftell
- 7 文件讀寫出錯檢測
- 7.1 函數(shù)ferror
- 7.2 函數(shù)clearerr
1 fopen文件操作方式
| “r”只讀 | 為了輸入數(shù)據(jù),打開一個已存在的文本文件 | 出錯 |
| “w”只寫 | 為了輸出數(shù)據(jù),打開一個文本文件(清空) | 建立新文件 |
| “a”追加 | 向文本文件末尾添加數(shù)據(jù) | 出錯 |
| “rb”只讀 | 為了輸入數(shù)據(jù),打開一個已存在的二進制文件 | 出錯 |
| “wb”只讀 | 為了輸出數(shù)據(jù),打開一個二進制文件(清空) | 建立新文件 |
| “ab”追加 | 向二進制文件末尾添加數(shù)據(jù) | 出錯 |
| “r+”讀寫 | 為了讀和寫,打開一個文本文件 | 出錯 |
| “w+”讀寫 | 為了讀和寫,打開一個文本文件(清空) | 建立新文件 |
| “a+”讀寫 | 為了讀和寫,打開一個文本文件 | 出錯 |
| “rb+”讀寫 | 為了讀和寫,打開一個二進制文件 | 出錯 |
| “wb+”讀寫 | 為了讀和寫,打開一個二進制文件(清空) | 建立新文件 |
| “ab+”讀寫 | 為了讀和寫,打開一個二進制文件 | 出錯 |
- 用“r”方式打開文件只能用于向計算機輸入而不能用作向該文件輸出數(shù)據(jù)(即讀數(shù)據(jù)到變量中),若文件不存在會出錯
- 用“w”方式打開文件只能用于向該文件寫數(shù)據(jù)(即往文件里寫數(shù)據(jù)),而不能用來向計算機輸入,如果原文件不存在,則創(chuàng)建該文件,若該文件已存在,則打開文件前將其刪除,再重新創(chuàng)建一個
- 若要向文件末尾添加數(shù)據(jù)(不希望刪除原有數(shù)據(jù)),則使用“a”方式,文件不存在會出錯
- 帶“+”的方式,既可用來輸入數(shù)據(jù),也可用來輸出數(shù)據(jù)
- 若以任意方式打開文件失敗,fopen函數(shù)會返回NULL
- 在以文本文件(ASCII)讀入字符時,遇到回車換行符(\r\n),系統(tǒng)把它轉(zhuǎn)換為一個換行符(\n),在輸出時把換行符(\n)轉(zhuǎn)換為回車(\r)和換行(\n)兩個字符
- 在以二進制方式時,不進行上述轉(zhuǎn)換,在內(nèi)存中的數(shù)據(jù)形式與輸出到外部文件中的數(shù)據(jù)形式完全一致,一一對應
1.1 打開文件fopen
FILE *fp = fopen("abc.txt", "r");1.2 關(guān)閉文件fclose
fclose(fp); // 關(guān)閉成功返回0,否則返回EOF(-1)2 向文件讀寫字符
2.1 讀字符fgetc
函數(shù)原型int fgetc(FILE *stream)
- 調(diào)用形式ch = fgetc(fp)
- 從fp指向的文件讀入一個字符,該函數(shù)以無符號char 強制轉(zhuǎn)換為int的形式返回讀取的字符,讀成功,帶回所讀的字符,失敗則返回文件結(jié)束標志EOF(-1)
2.2 寫字符fputc
函數(shù)原型int fputc(int char, FILE *stream)
- 調(diào)用形式fputc(ch,fp)
- 把字符ch寫到文件指針變量fp所指的文件中,輸出成功返回值就是輸出的字符,輸出失敗則返回EOF(-1)
3 向文件讀寫字符串
3.1 讀字符串fgets
函數(shù)原型char *fgets(char *str, int n, FILE *stream)
- 調(diào)用形式fgets(str, n, fp)
- n為要求得到字符個數(shù)(但實際上只有n-1),從fp所指的文件讀入一個長度為n-1的字符串,并在最后加一個\0
- 然后把這n個字符存放在字符數(shù)組str中,若在讀完n-1個字符之前遇到換行符(\n)或文件結(jié)束符EOF,讀入結(jié)束
- 若執(zhí)行函數(shù)成功,則返回str數(shù)組首元素的地址,若一開始就遇到文件末尾或讀數(shù)據(jù)出錯,則返回NULL
3.2 寫字符串fputs
函數(shù)原型int fputs(const char *str, FILE *stream)
- 調(diào)用形式fputs(str, fp),把str所指向的字符串寫到文件指針變量fp指向的文件中,字符串末尾的\0不輸出
- 輸出成功返回0,失敗返回EOF
4 格式化方式讀寫文件
fprintf和fscanf,在輸入時要將文件的ASCII碼轉(zhuǎn)換為二進制形式在保存,再輸出時又要將二進制形式轉(zhuǎn)換為字符,要花費較多時間
4.1 格式化寫fprintf
函數(shù)原型int fprintf(FILE *stream, const char *format, ...)
- 如果成功,則返回寫入的字符總數(shù),否則返回一個負數(shù)
4.2 格式化讀fscanf
函數(shù)原型int fscanf(FILE *stream, const char *format, ...)
- 如果成功,返回成功匹配和賦值的個數(shù)。如果到達文件末尾或發(fā)生讀錯誤,則返回EOF
5 二進制向文件讀寫一組數(shù)據(jù)
5.1 二進制讀fread
函數(shù)原型size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream),
- ptr為從文件讀入的數(shù)據(jù)保存的地址
- size為要讀的字節(jié)數(shù)
- nmemb為元素的個數(shù),每個元素的大小為 size 字節(jié)
- stream輸出流的FILE指針
- 返回成功讀取的個數(shù)
5.2 二進制寫fwrite
函數(shù)原型size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
- ptr為要向文件寫入的數(shù)據(jù)首地址
- size為要寫的字節(jié)數(shù)
- nmemb為元素的個數(shù),每個元素的大小為 size 字節(jié)
- stream輸入流的FILE指針
- 返回成功寫入的個數(shù)
6 隨機讀寫數(shù)據(jù)文件
6.1 指向文件開頭rewind
函數(shù)原型void rewind(FILE *stream)
- rewind的作用是使文件位置標記重新返回文件的開頭
- 此函數(shù)沒有返回值
- 調(diào)用形式rewind(fp);,將fp指向文件開頭
6.2 改變位置fseek
函數(shù)原型int fseek(FILE *stream, long int offset, int whence)
- stream為所操作的文件指針
- offset這是相對 whence 的偏移量,以字節(jié)為單位,注意它是long int類型
- whence這是表示開始添加偏移offset的位置。它一般指定為下列常量之一:
| SEEK_SET | 文件的開頭 | 0 |
| SEEK_CUR | 文件指針的當前位置 | 1 |
| SEEK_END | 文件的末尾 | 2 |
- 向后移動,調(diào)用形式fseek(fp,100L,SEEK_SET);,表示從文件的開頭,向后偏移到100個字節(jié)
- 向前移動,調(diào)用形式fseek(fp,-200L,SEEK_END);,表示從文件的末尾,向前偏移到200個字節(jié)
- 如果成功,則該函數(shù)返回零,否則返回非零值
6.3 測定當前位置ftell
函數(shù)原型long int ftell(FILE *stream)
- stream文件指針
- ftell函數(shù)的作用是得到流式文件中文件位置標記的當前位置
- 該函數(shù)返回位置標識符的當前值。如果發(fā)生錯誤,則返回 -1L,全局變量errno被設置為一個正值
7 文件讀寫出錯檢測
7.1 函數(shù)ferror
- 在調(diào)用一個輸入輸出函數(shù)后,可以使用ferror(fp)檢測是否出現(xiàn)錯誤
- 返回0代表未出錯,返回非零表示出錯
- 對同一個文件每調(diào)用一次輸入輸出函數(shù),都會產(chǎn)生新的值,應該在每次輸入輸出函數(shù)調(diào)用后,立即檢測
7.2 函數(shù)clearerr
- 若調(diào)用一個輸入輸出函數(shù)出錯后,ferror為非零值
- 調(diào)用clearerr(fp);可以將錯誤標記的值置位0,以便一下次檢測
總結(jié)
以上是生活随笔為你收集整理的C语言-文件操作总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android-去除Button默认边框
- 下一篇: C语言-定义与初始化总结