【C++ 语言】文件操作 ( fopen | fprintf | fscanf | fgets | fputc | fgetc | ofstream | ifstream )
文章目錄
- I C 函數(shù) fopen 打開文件
- II C 函數(shù) fprintf 寫出文件
- III C 函數(shù) fscanf 讀取文件 ( 遇到空格換行結(jié)束)
- IV C 函數(shù) fgets 讀取文件 ( 遇到換行結(jié)束)
- V C 函數(shù) fputc 寫出單個(gè)字符
- VI C 函數(shù) fgetc 讀取單個(gè)字符
- VII C++ IO 流
- VIII 文件操作代碼示例
I C 函數(shù) fopen 打開文件
跨平臺(tái)開發(fā)時(shí)使用 C++ 對(duì)文件讀寫不經(jīng)常使用 , 主要使用 C 語言對(duì)文件進(jìn)行讀寫操作 ;
1. C 文件打開 :
- ① 頭文件 : stdio.h
- ② 原型 : FILE* fopen ( const char* path , const char* mode ) ;
2. 參數(shù)解析 :
- ① const char* path : 要打開的文件路徑 , 可以是相對(duì)路徑 , 也可以是絕對(duì)路徑 ;
- ② const char* mode : 打開文件的模式 ;
3. 文件打開模式只讀或只寫操作 :
- ① " r " : 打開已經(jīng)存在的文本文件 , 只讀操作 ;
- ② " w " : 打開文本文件 , 只寫操作 , 從開始開始寫入內(nèi)容 ;
- a. 文件不存在 : 創(chuàng)建新文件 , 從開頭寫入內(nèi)容 ;
- b. 文件存在 : 刪除原有內(nèi)容 , 從開頭寫入內(nèi)容 ;
- ③ " a " : 打開文件文件 , 只寫操作 , 追加寫入內(nèi)容 ;
- a. 文件不存在 : 創(chuàng)建新文件 , 從開頭寫入內(nèi)容 ;
- b. 文件存在 : 在原有文件基礎(chǔ)上 , 追加寫入內(nèi)容 ;
4. 文件打開模式讀寫操作 :
- ① " r+ " : 打開文本文件 , 讀寫操作 ;
- ② " w+ " : 打開文本文件 , 讀寫操作 ; 從開始開始寫入內(nèi)容 ;
- a. 文件不存在 : 創(chuàng)建新文件 , 從開頭寫入內(nèi)容 ;
- b. 文件存在 : 刪除原有內(nèi)容 , 從開頭寫入內(nèi)容 ;
- ③ " a+ " : 打開文本文件 , 讀寫操作 ; 追加寫入內(nèi)容 ;
- a. 文件不存在 : 創(chuàng)建新文件 , 從開頭寫入內(nèi)容 ;
- b. 文件存在 : 在原有文件基礎(chǔ)上 , 追加寫入內(nèi)容 ;
II C 函數(shù) fprintf 寫出文件
fprintf 函數(shù)簡介 :
- ① 頭文件 : stdio.h
- ② 函數(shù)原型 : int fprintf (FILE* stream, const char*format, [argument])
- ③ 參數(shù) 1 ( FILE * stream ) : FILE 指針 , 指向標(biāo)識(shí)文件流的對(duì)象 ;
- ④ 參數(shù) 2 ( const char * format ) : C 字符串 , 要寫出的文本 , 包含占位符 ;
- ⑤ 參數(shù) 3 ( [argument] ) : 字符串中的占位符參數(shù)列表 ;
- ⑤ 函數(shù)作用 : 根據(jù)規(guī)定的數(shù)據(jù)格式 , 向輸出流中寫出數(shù)據(jù) ;
代碼示例 :
//1. fprintf 寫出文本//創(chuàng)建一個(gè)只寫的文件 , 每次執(zhí)行都重新寫入內(nèi)容// 這里使用相對(duì)路徑 , 直接在代碼路徑下創(chuàng)建一個(gè)文件FILE* file_text_write = fopen("my_file.txt", "w");//文本形式寫出內(nèi)容 : 使用格式化的方式輸出文本內(nèi)容fprintf(file_text_write, "姓名:%s 學(xué)號(hào):%d", "Tom", 1);//關(guān)閉文件 , 只有有 fopen , 就必須有對(duì)應(yīng)的 fclose 與之對(duì)應(yīng)fclose(file_text_write);III C 函數(shù) fscanf 讀取文件 ( 遇到空格換行結(jié)束)
fscanf 函數(shù)簡介 :
- ① 頭文件 : stdio.h
- ② 函數(shù)原型 : int fscanf(FILE * stream, const char * format, [argument...]);
- ③ 參數(shù) 1 ( FILE * stream ) : FILE 指針 , 指向標(biāo)識(shí)文件流的對(duì)象 ;
- ④ 參數(shù) 2 ( const char * format ) : C 字符串 , 聲明讀取的數(shù)據(jù)類型 ;
- ⑤ 函數(shù)作用 : 根據(jù)規(guī)定的數(shù)據(jù)格式 , 從輸入流中讀取數(shù)據(jù) ;
fscanf 與 fgets 函數(shù)對(duì)比 :
- ① fscanf 遇到空格 , 換行 結(jié)束讀取 ;
- ② fgets 遇到空格時(shí)不結(jié)束讀取 , 遇到換行時(shí)結(jié)束 ;
代碼示例 :
//2. fscanf 讀取文本//以只讀形式打開FILE* file_text_read_fscanf = fopen("my_file.txt", "r");//讀取文件//定義讀取文件文本的緩沖區(qū) , 最大可以讀取 1024 個(gè)字符char buffer[1024];//如果沒有遇到結(jié)尾 , 就一直讀取while (!feof(file_text_read_fscanf)){//參數(shù)1 : 文件指針 , 參數(shù)2 : 占位符 , 參數(shù)3 : 接收的緩沖區(qū)// 該方法遇到空格 , 會(huì)中斷讀取 , 因此這里要循環(huán)讀取數(shù)據(jù)fscanf(file_text_read_fscanf, "%s", buffer);cout << "fscanf 讀取到的文本內(nèi)容 : " << buffer << endl;}//對(duì)應(yīng)fopenfclose(file_text_read_fscanf);執(zhí)行結(jié)果 : 遇到空格讀取就會(huì)中斷 , 這里循環(huán)了 2 次將文件讀取完畢 ;
fscanf 讀取到的文本內(nèi)容 : 姓名:Tom fscanf 讀取到的文本內(nèi)容 : 學(xué)號(hào):1IV C 函數(shù) fgets 讀取文件 ( 遇到換行結(jié)束)
1. fgets 函數(shù)簡介 :
- ① 頭文件 : stdio.h
- ② 函數(shù)原型 : char *fgets(char *str, int n, FILE *stream);
- ③ 參數(shù) 1 ( char *str ) : 字符指針 , 指向讀取文件字符串的緩沖區(qū) ;
- ④ 參數(shù) 2 ( int n ) : 緩沖區(qū)中可讀取的最大字符數(shù) ;
- ⑤ 參數(shù) 3 ( FILE *stream ) : FILE 指針 , 指向標(biāo)識(shí)文件流的對(duì)象 ;
- ⑤ 函數(shù)作用 : 從輸入流中讀取一行文本數(shù)據(jù) , 并將文本存儲(chǔ)到字符數(shù)組緩沖區(qū)中 ;
2. fscanf 與 fgets 函數(shù)對(duì)比 :
- ① fscanf 遇到空格 , 換行 結(jié)束讀取 ;
- ② fgets 遇到空格時(shí)不結(jié)束讀取 , 遇到換行時(shí)結(jié)束 ;
3. 代碼示例 :
//3. fgets 讀取指定大小的文本//以只讀形式打開FILE* file_text_read_fgets = fopen("my_file.txt", "r");//讀取文件//定義讀取文件文本的緩沖區(qū) , 最大可以讀取 1024 個(gè)字符char buffer1[1024];//參數(shù)1 : 接收的緩沖區(qū) , 參數(shù)2 : 讀取的字節(jié)數(shù) , 參數(shù)3 : 文件指針// 該方法遇到空格 , 會(huì)繼續(xù)讀取 , 因此這里只需要讀取一次即可fgets(buffer1, 1024, file_text_read_fgets);cout << "fgets 讀取到的文本內(nèi)容 : " << buffer1 << endl;//對(duì)應(yīng)fopenfclose(file_text_read_fgets);4. 執(zhí)行結(jié)果 :
fgets 讀取到的文本內(nèi)容 : 姓名:Tom 學(xué)號(hào):1V C 函數(shù) fputc 寫出單個(gè)字符
1. fputc 函數(shù)簡介 :
- ① 頭文件 : stdio.h
- ② 函數(shù)原型 : int fputc (int c, File *fp)
- ③ 參數(shù) 1 ( int c ) : 要寫出的字符 ;
- ④ 參數(shù) 2 ( File *fp ) : 文件指針 ;
- ⑤ 函數(shù)作用 : 向文件中寫出一個(gè)單個(gè)字符 ;
- ⑥ 返回值 : 如果寫出成功 , 返回寫出字符的 ASCII 值 , 如果寫出失敗 , 返回 EOF 即 -1 ;
2. 代碼示例 :
//4. 寫出單個(gè)字符FILE* file_text_read_fputc = fopen("my_file.txt", "w");//寫出單個(gè)字符串fputc('A', file_text_read_fputc);//關(guān)閉文件fclose(file_text_read_fputc);VI C 函數(shù) fgetc 讀取單個(gè)字符
1. fgetc 函數(shù)簡介 :
- ① 頭文件 : stdio.h
- ② 函數(shù)原型 : int fgetc(FILE *stream)
- ④ 參數(shù) ( File *stream ) : 文件指針 ;
- ⑤ 函數(shù)作用 : 從文件流中讀取一個(gè)字符 ;
- ⑥ 返回值 : 從文件中讀取的字符 ASCII 碼值 ;
2. 代碼示例 :
//5. 讀取單個(gè)字符FILE* file_text_read_getc = fopen("my_file.txt", "r");//讀取單個(gè)字符串int fgetc_result = fgetc(file_text_read_getc);//將 int 類型變量轉(zhuǎn)為 char 類型變量char fgetc_result_char = fgetc_result;cout << "fgetc 讀取的單個(gè)字符 : " << fgetc_result_char << endl;//關(guān)閉文件fclose(file_text_read_getc);3. 執(zhí)行結(jié)果 :
fgetc 讀取的單個(gè)字符 : AVII C++ IO 流
1. C++ 中主要使用以下三個(gè)數(shù)據(jù)類型進(jìn)行 IO 流操作 ;
- ofstream : 文件輸出流 , 向文件寫出內(nèi)容 ( 如果沒有文件會(huì)創(chuàng)建文件 ) ;
- ifstream : 文件輸入流 , 讀取文件內(nèi)容 ;
- fstream : 文件輸入輸出流 , 兼顧上述兩種輸入輸出流的功能 ;
2. 創(chuàng)建輸出流 ofstream : 直接聲明 ofstream 對(duì)象即可 ;
//創(chuàng)建 io 輸出流ofstream io_out_file_stream;3. 打開文件輸出流 : 調(diào)用 ofstream 對(duì)象的 open() 方法 , 即可打開文件的輸出流 , 可以用于向文件中寫入數(shù)據(jù) ;
//使用 io_out_file_stream 打開或創(chuàng)建文件io_out_file_stream.open("io_file.txt");4. 從命令行讀取數(shù)據(jù) : 使用 cin >> io_buffer; 指令 , 可以阻塞命令行 , 等待用戶輸入文本信息 ; io_buffer 是一個(gè) char 數(shù)組緩沖區(qū) ;
//該操作會(huì)阻塞命令行 , 等待用戶輸入文本信息cin >> io_buffer;5. 向文件中寫出數(shù)據(jù) : io_out_file_stream << io_buffer << endl; , 向 io_out_file_stream 輸出流中寫入數(shù)據(jù) , 即將緩沖區(qū)中的內(nèi)容寫出到了文件中 ;
// 向文件寫入用戶輸入的數(shù)據(jù)io_out_file_stream << io_buffer << endl;6. 創(chuàng)建輸入流 : 聲明 ifstream 類型對(duì)象 , 即創(chuàng)建了一個(gè)文件輸入流對(duì)象 ;
//打開輸入流ifstream io_in_file_stream;7. 打開文件輸入流 : 調(diào)用 ifstream 文件輸入流對(duì)象的 open 方法 , 即可獲取指定路徑文件的輸入流 ;
//打開文件io_in_file_stream.open("io_file.txt");8. 讀取文件中的內(nèi)容 : 調(diào)用 io_in_file_stream >> io_buffer; , 可以將文件內(nèi)容讀取到 io_buffer 緩沖區(qū)中 ;
//將文件內(nèi)容讀取到緩沖區(qū)中io_in_file_stream >> io_buffer;9. 代碼示例 :
//7. C++ 流操作// ( 1 ) 寫出數(shù)據(jù)到文件//創(chuàng)建緩沖區(qū)char io_buffer[100];//創(chuàng)建 io 輸出流ofstream io_out_file_stream;//使用 io_out_file_stream 打開或創(chuàng)建文件io_out_file_stream.open("io_file.txt");//命令行中進(jìn)行提示cout << "輸入你的名字: ";//該操作會(huì)阻塞命令行 , 等待用戶輸入文本信息cin >> io_buffer;// 向文件寫入用戶輸入的數(shù)據(jù)io_out_file_stream << io_buffer << endl;//關(guān)閉輸出流io_out_file_stream.close();// ( 2 ) 從文件讀取數(shù)據(jù)//打開輸入流ifstream io_in_file_stream;//打開文件io_in_file_stream.open("io_file.txt");cout << "讀取文件" << endl;//將文件內(nèi)容讀取到緩沖區(qū)中io_in_file_stream >> io_buffer;//將緩沖區(qū)中內(nèi)容打印到控制臺(tái)cout << "讀取的文件內(nèi)容 : " << io_buffer << endl;// 關(guān)閉io_in_file_stream.close();10. 執(zhí)行結(jié)果 :
輸入你的名字: 1 讀取文件 讀取的文件內(nèi)容 : 1VIII 文件操作代碼示例
代碼調(diào)用示例 :
// XI . IO流//1. fprintf 寫出文本//創(chuàng)建一個(gè)只寫的文件 , 每次執(zhí)行都重新寫入內(nèi)容// 這里使用相對(duì)路徑 , 直接在代碼路徑下創(chuàng)建一個(gè)文件FILE* file_text_write = fopen("my_file.txt", "w");//文本形式寫出內(nèi)容 : 使用格式化的方式輸出文本內(nèi)容fprintf(file_text_write, "姓名:%s 學(xué)號(hào):%d", "Tom", 1);//關(guān)閉文件 , 只有有 fopen , 就必須有對(duì)應(yīng)的 fclose 與之對(duì)應(yīng)fclose(file_text_write);//2. fscanf 讀取文本//以只讀形式打開FILE* file_text_read_fscanf = fopen("my_file.txt", "r");//讀取文件//定義讀取文件文本的緩沖區(qū) , 最大可以讀取 1024 個(gè)字符char buffer[1024];//如果沒有遇到結(jié)尾 , 就一直讀取while (!feof(file_text_read_fscanf)){//參數(shù)1 : 文件指針 , 參數(shù)2 : 占位符 , 參數(shù)3 : 接收的緩沖區(qū)// 該方法遇到空格 , 會(huì)中斷讀取 , 因此這里要循環(huán)讀取數(shù)據(jù)fscanf(file_text_read_fscanf, "%s", buffer);cout << "fscanf 讀取到的文本內(nèi)容 : " << buffer << endl;}//對(duì)應(yīng)fopenfclose(file_text_read_fscanf);//3. fgets 讀取指定大小的文本//以只讀形式打開FILE* file_text_read_fgets = fopen("my_file.txt", "r");//讀取文件//定義讀取文件文本的緩沖區(qū) , 最大可以讀取 1024 個(gè)字符char buffer1[1024];//參數(shù)1 : 接收的緩沖區(qū) , 參數(shù)2 : 讀取的字節(jié)數(shù) , 參數(shù)3 : 文件指針// 該方法遇到空格 , 會(huì)繼續(xù)讀取 , 因此這里只需要讀取一次即可fgets(buffer1, 1024, file_text_read_fgets);cout << "fgets 讀取到的文本內(nèi)容 : " << buffer1 << endl;//對(duì)應(yīng)fopenfclose(file_text_read_fgets);//4. 寫出單個(gè)字符FILE* file_text_read_fputc = fopen("my_file.txt", "w");//寫出單個(gè)字符串fputc('A', file_text_read_fputc);//關(guān)閉文件fclose(file_text_read_fputc);//5. 讀取單個(gè)字符FILE* file_text_read_getc = fopen("my_file.txt", "r");//讀取單個(gè)字符串int fgetc_result = fgetc(file_text_read_getc);//將 int 類型變量轉(zhuǎn)為 char 類型變量char fgetc_result_char = fgetc_result;cout << "fgetc 讀取的單個(gè)字符 : " << fgetc_result_char << endl;//關(guān)閉文件fclose(file_text_read_getc);//6. 讀寫二進(jìn)制文件 使用 fwrite 與 fread 讀寫文件//7. C++ 流操作// ( 1 ) 寫出數(shù)據(jù)到文件//創(chuàng)建緩沖區(qū)char io_buffer[100];//創(chuàng)建 io 輸出流ofstream io_out_file_stream;//使用 io_out_file_stream 打開或創(chuàng)建文件io_out_file_stream.open("io_file.txt");//命令行中進(jìn)行提示cout << "輸入你的名字: ";//該操作會(huì)阻塞命令行 , 等待用戶輸入文本信息cin >> io_buffer;// 向文件寫入用戶輸入的數(shù)據(jù)io_out_file_stream << io_buffer << endl;//關(guān)閉輸出流io_out_file_stream.close();// ( 2 ) 從文件讀取數(shù)據(jù)//打開輸入流ifstream io_in_file_stream;//打開文件io_in_file_stream.open("io_file.txt");cout << "讀取文件" << endl;//將文件內(nèi)容讀取到緩沖區(qū)中io_in_file_stream >> io_buffer;//將緩沖區(qū)中內(nèi)容打印到控制臺(tái)cout << "讀取的文件內(nèi)容 : " << io_buffer << endl;// 關(guān)閉io_in_file_stream.close();執(zhí)行結(jié)果 :
fscanf 讀取到的文本內(nèi)容 : 姓名:Tom fscanf 讀取到的文本內(nèi)容 : 學(xué)號(hào):1 fgets 讀取到的文本內(nèi)容 : 姓名:Tom 學(xué)號(hào):1 fgetc 讀取的單個(gè)字符 : A 輸入你的名字: 1 讀取文件 讀取的文件內(nèi)容 : 1總結(jié)
以上是生活随笔為你收集整理的【C++ 语言】文件操作 ( fopen | fprintf | fscanf | fgets | fputc | fgetc | ofstream | ifstream )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++ 语言】异常 ( 抛出字符串异
- 下一篇: 【C++ 语言】Visual Studi