C/C++文件操作

一. fopen、fwrite、fread、fseek

  •  #include<stdio.h>

 

1. fopen

  • 原型:FILE * fopen(const char * path,const char * mode);
  • path是绝对路径,可以是绝对路径,也可以是相对路径。
  • Windows下绝对路径要这么写:"C:\\test\\test"
  • mode有以下几种选择:
r打开只读文件,该文件必须存在
r+打开可读写的文件,该文件必须存在
w打开只写文件,若文件存在则清空重写。若文件不存在则建立该文件。
w+打开可读写文件,若文件存在则清空内容。若文件不存在则建立该文件。
a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾。
a+以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后。
b可以和上面的组合,表示操作二进制文件
t可以和上面的组合,表示操作文本文件

2. fread \ fwrite

  • size_t fread(void* ptr,size_t size,size_t nmemb,FILE* stream)
  • fread 和fwrite 的函数原型都差不多
  • ptr:读入/写入的buffer
  • size:每次读取/写入的数据大小
  • nmemb:读取/写入的次数
  • stream:上面fopen返回的FILE指针
  • 返回值:成功返回nmemb,返回<=0时表示已经没有可写/可读的数据,或者读写失败。

3. fclose

  • 写完数据后要调用fclose()关闭流,不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。

4. fprintf

  • int fprintf(FILE *stream, const char *format, ...)
  • 用法和printf相似

5. fgets

  • char *  fgets(char * s, int n,FILE *stream);
  • 参数:
    st -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
    n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
    stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。
  • fgets一般会读取一行,但要注意,读取进来的不会自动处理掉\n,所以要记得处理。

6. 读写一行代码参考:

C语言文件操作——读一行和写一行

 

二. C++

  • C++在头文件fstream 中定义了多个新类,包含用于文件输入的ifstream 和用于文件输出的ofstream类。C++还定义了一个fstream类,用于同步文件I/O。
  • ofstream的使用:
    ①创建类:ofstream fout;  或者 ofstream fout("jar.txt");
    ②打开文件:fout.open("jar.txt");
    ③写入:fout<<"test";
    ④关闭:fout.close();
    ⑤检查是否打开:fout.is_open();
  • ifstream的使用(类似ofstream):
    ①创建类:ifstream fin;  或者 ifstream fin("jar.txt");
    ②打开文件:fin.open("jar.txt");
    ③写入:fin>>ch; (char ch;)或者 fin>>buf; (char buf[80];)或者 getline(fin,line); (string line;)
    ④关闭:fin.close();
  • 和C一样,C++也可以在打开文件时指定文件模式:ifstream("text",mode); 或 ofstream fout; fout.open("text",mode);
  • ios_base定义了一个openmode类型(可以多个同时使用,用|隔开):
ios_base::in打开文件,以便读取
ios_base::out打开文件,以便写入

ios_base::ate

打开文件,并移动到文件尾
ios_base::app追加到文件尾
ios_base::trunc如果文件存在,则截短文件
ios_base::binary二进制文件

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值