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);
原文链接: https://www.cnblogs.com/Miranda-lym/p/5487668.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/233307

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午3:50
下一篇 2023年2月13日 下午3:50

相关推荐