C中采用的主要是文件指針的辦法,C++中對文件的操作主要運用了“文件流”(即非標准的輸入輸出)的思想
eg1":
#include<stdio.h> //... FILE* fp=fopen("1.txt","w"); if(fp!=NULL){ //查看文件是否創建成功(若文件未打開成功則會返回NULL) fprintf(fp,"hello world"); fclose(fp); //該語句若忘記,則可能在程序運行前並看不到文件內容,因為緩沖區內容未刷新到目的地,也可能造成數據丟失 }
eg2
#include <stdio.h> //FILE,fopen(),fprintf(),fscanf(),fclose(),printf() #include <stdlib.h> //system() int main() { int i = 520; float f = 13.14159; char str[100] = "Miranda-lym"; //寫文件,不存在則創建 FILE* fp1 = fopen("out.txt", "w"); if (fp1 != NULL) { fprintf(fp1, " %d\n %.2f\n %s\n", i, f, str); fclose(fp1); } //查看寫好的文件 system("out.txt");
int ii = 0; float ff = 0; char str2[100] = ""; //讀文件 FILE* fp2 = fopen("out.txt", "r"); if (fp2 != NULL) { fscanf(fp2, "%d%f%s", &ii, &ff, str2); fclose(fp2); } //將讀出的內容顯示 printf(" i = %d\n f = %.2f\n str = %s\n", ii, ff, str2); return 0; }
fprintf() 比 printf() 多第一個參數,格式化后將輸出到一個stream,通常是到文件,其原型如下:
int fprintf( FILE *stream, const char *format, ... );
fprintf()函數根據指定的format(格式)發送信息(參數)到由stream(流)指定的文件.因此fprintf()可以使得信息輸出到指定的文件.如: fprintf( out, "Hello %s\n", name );
fopen() 原型:FILE *fopen(const char *filename,const char *mode),fopen實現三個功能:為使用而打開一個流,把一個文件和此流相連接,給此流返回一個FILE指針。mode表示打開狀態的字符串,"r" 以只讀方式打開文件,"w" 以只寫方式打開文件;"a" 以追加方式打開文件;"r+" 以讀寫方式打開文件,如無文件出錯;"w+" 以讀寫方式打開文件,如無文件生成新文件
fclose()的功能就是關閉用fopen()打開的文件,原型:int fclose(FILE *fp); //成功返回0,失敗返回EOF。
在程序結束時一定要記得關閉打開的文件,不然可能會造成數據丟失的情況
C++文件流:
fstream // 文件流
ifstream // 輸入文件流
ofstream // 輸出文件流
在fstream類中,成員函數open()實現打開文件的操作,從而將數據流與文件進行關聯,通過ofstream,ifstream,fstream的對象來進行對文件的讀寫操作
#include<fstream> using namespace std; //... fstream fout("1.txt",ios::out); if(fout.is_open()){ //作用同上,只是is_open的返回值是布爾型 fout<<"hello world"<<name<<endl; //... fout.close(); }
打開文件的方式在ios類(所以流式I/O的基類)中定義,有如下幾種方式
ios::in | 為輸入(讀)而打開文件 |
ios::out | 為輸出(寫)而打開文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 所有輸出附加在文件末尾 |
ios::trunc | 如果文件已存在則先刪除該文件 |
ios::binary | 二進制方式 |
這些方式是能夠進行組合使用的,以“或”運算(“|”)的方式, 如fout.open("Hello.txt", ios::in|ios::out|ios::binary);