C語言超詳細(xì)文件操作基礎(chǔ)下篇
一、文件的順序讀寫
兄弟們,上一章只介紹到了如何把單個(gè)的字符或者字符串如何寫到文件里或者從文件中讀取,文件的順序讀寫后面還有幾個(gè)函數(shù)沒有介紹完,我們接著上一章繼續(xù),給大家介紹完,圖片再拷給大家回顧回顧
1圖片如下:
1.格式化的輸出函數(shù)(fprintf)
這樣我們就可以把格式化的數(shù)據(jù)寫到文件里了。
代碼如下:
#include<stdio.h> struct S { char arr[10]; int num; float sc; }; int main() { struct S s = { "abcdef",20,5.5f }; FILE* pf = fopen("test.dayta", "w"); if (NULL == pf) { return 1; } //寫文件 fprintf(pf, "%s %d %f", s.arr, s.num, s.sc);//這就是如何把格式化的數(shù)據(jù)寫到文件里 //關(guān)閉文件 fclose(pf); pf = NULL; return 0; }
2.格式化的輸入函數(shù)(fscanf)
這樣我們就可以從文件里讀取格式化的數(shù)據(jù)了。
代碼如下:
#include<stdio.h> struct S { char arr[10]; int num; float sc; }; int main() { struct S s = {0}; FILE* pf = fopen("test.dayta", "r"); if (NULL == pf) { return 1; } //寫文件 fscanf(pf, "%s %d %f", s.arr, &(s.num), &(s.sc));//這就是如何把格式化的數(shù)據(jù)寫到文件里 printf("%s %d %f", s.arr, s.num, s.sc); fprintf(stdout, "%s %d %f", s.arr, s.num, s.sc);//這類函數(shù)參數(shù)不同,功能就不同,可以適用于所有的流 //關(guān)閉文件 fclose(pf); pf = NULL; return 0; }
3.二進(jìn)制讀寫
1.二進(jìn)制輸出函數(shù)(fwrite)
以二進(jìn)制的方式把數(shù)據(jù)寫到文件里
代碼如下:
struct S { char arr[10]; int num; float sc; }; int main() { struct S s = {"abcdef",20,5.5f}; FILE* pf = fopen("test.dayta", "w"); if (NULL == pf) { return 1; } //寫文件 fwrite(&s, sizeof(struct S), 1, pf); //關(guān)閉文件 fclose(pf); pf = NULL; return 0; }
2.二進(jìn)制輸入函數(shù)
以二進(jìn)制的方式從文件里讀取數(shù)據(jù)
代碼如下:
#include<stdio.h> struct S { char arr[10]; int num; float sc; }; int main() { struct S s = {0}; FILE* pf = fopen("test.dayta", "r"); if (NULL == pf) { return 1; } //寫文件 fread(&s, sizeof(struct S), 1, pf); printf("%s %d %f", s.arr, &(s.num), &(s.sc)); //關(guān)閉文件 fclose(pf); pf = NULL; return 0; }
3.scanf,fscanf,sscanf、printf,fprintf,sprintf的區(qū)別
scanf —? 針對(duì)標(biāo)準(zhǔn)輸入的格式化的輸入語句—stdin
fscanf — 針對(duì)所有輸入流的格式化的輸入語句 — stdin/文件
sscanf — 從一個(gè)字符串中讀取一個(gè)格式化的數(shù)據(jù)
printf — 針對(duì)標(biāo)準(zhǔn)輸出的格式化語句 — stdout?
fprintf — 針對(duì)所有輸出流的格式化輸出語句 — stdout/文件
sprintf — 把一個(gè)格式化的數(shù)據(jù),轉(zhuǎn)換成字符串
二、文件的隨機(jī)讀寫
1.fseek函數(shù)
fseek函數(shù):根據(jù)文件指針的位置和偏移量來定位文件指針。
代碼如下:
#include<stdio.h> int main() { FILE* pf = fopen("test.data", "r"); if (NULL == pf) { perror("main"); return 1; } //讀取文件 int ch = fgetc(pf); printf("%c\n", ch); //調(diào)整文件 fseek(pf, 2, SEEK_END); int ch = fgetc(pf); printf("%c\n", ch); //關(guān)閉文件 fclose(pf); pf = NULL; return 0; }
2.ftell函數(shù)
ftell函數(shù):返回文件指針相對(duì)于起始位置的偏移量(告知偏移量是多少)
3.rewind函數(shù)
rewind函數(shù):讓文件指針的位置回到文件的起始位置
三、被錯(cuò)誤使用的feof
feof(文件結(jié)束返回非0)
feof應(yīng)用于當(dāng)文件讀取結(jié)束的時(shí)候,判斷是讀取失敗結(jié)束,還是遇文件尾結(jié)束
fgetc函數(shù)在讀取結(jié)束的時(shí)候,會(huì)返回EOF,正常讀取的時(shí)候,返回的是讀取到的字符ASCII碼值
fgets函數(shù)在讀取結(jié)束的時(shí)候返回NULL,正常讀取的時(shí)候返回存放字符串的空間起始地址。
fread函數(shù)在讀取的時(shí)候,返回的是實(shí)際讀取到的完整元素的個(gè)數(shù)。如果發(fā)現(xiàn)讀取到的元素個(gè)數(shù)小于指定的元素個(gè)數(shù),這就是最后一次讀取了。
寫代碼test.txt文件拷貝一份,生成test2,txt
#include<stdio.h> int main() { FILE* pfread = fopen("test.txt", "r"); if (NULL == pfread) { return 1; } FILE* pfwrite = fopen("test2.txt", "w"); { if (pfread == NULL) { fclose(pfread); pfread = NULL; return 1; } //文件打開成功 //讀寫文件 int ch = 0; while((ch = fgetc(pfread))!= EOF) { //寫文件 fputc(ch, pfwrite); } } //關(guān)閉文件 fclose(pfwrite); pfwrite = NULL; return 0; }
總結(jié)
綜合兩篇文章簡單的介紹了什么是文件,文件的使用和操作方法,學(xué)會(huì)文件的使用讓我們能更進(jìn)一步加深對(duì)編程的了解,相信大家都學(xué)會(huì)了。如果上述文章有任何問題?,歡迎大佬們提出質(zhì)疑,我會(huì)虛心學(xué)習(xí)和改正,最重要的是能共同進(jìn)步,共同成長,學(xué)習(xí)好編程。
到此這篇關(guān)于C語言超詳細(xì)文件操作基礎(chǔ)下篇的文章就介紹到這了,更多相關(guān)C語言 文件操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c語言中的二級(jí)指針做函數(shù)參數(shù)說明
這篇文章主要介紹了c語言中的二級(jí)指針做函數(shù)參數(shù)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05C++ namespace相關(guān)語法實(shí)例分析
這篇文章主要介紹了C++ namespace相關(guān)語法實(shí)例分析,對(duì)C++初學(xué)者有很好的參考借鑒價(jià)值,需要的朋友可以參考下2014-08-08C++11運(yùn)算符重載和向量類重載實(shí)例詳解(<<,>>,+,-,*等)
這篇文章主要給大家介紹了關(guān)于C++11運(yùn)算符重載和向量類重載的相關(guān)資料,主要包括<<,>>,+,-,*等,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07C++實(shí)現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Java C++算法題解leetcode1592重新排列單詞間的空格
這篇文章主要為大家介紹了Java C++算法題解leetcode1592重新排列單詞間的空格示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09