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