C和C++中文件讀寫的區別


 

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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM