C语言/C++ 文件操作

一、C语言文件操作

1.打开文件

函数:调用 fopen()函数

操作:

FILE *fp;
fp=open("文件路径","打开模式");//用文件指针来接收文件结构指针地址

关于文件路径

c语言中 的 \ 为 转义字符 若想表达 " \ " 需要用 \\

关于打开模式

1.打开文本文件

“r” :只读 前提是文件存在

“w” : 只写 如不存在文件则新建,如存在文件则删除重建

“a” :追加 打开时文件指针指向末尾(这意味着在末尾添加数据)文件不存在则打开失败

“r+” :可读可写 前提是文件存在

“w+” :可读可写 新建文件 填写数据 之后可读

“a+” :可读可写 打开是文件指针移动到文件末尾

2.打开二进制文件

在文本文件模式名称后加 后缀 b 其他同文本文件的打开模式

2.关闭文件

方式:调用 fclose()函数

操作:

fclose(fp);

注:

fopen() 打开文件先将文件复制到缓冲区 当fclose()关闭文件时 缓冲区数据才会写入磁盘

在程序结束后会自动关闭文件 但手动关闭文件(即用fclose()函数)可以提高系统的执行效率
而且如不关闭,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。

3.字符存取

方式:调用 fgetc() fputc()函数

操作:

FILE *fp;
fp=open(".....","r");
char ch;
while (!feof(fp))//feof()判断是否到达文件末尾
{
   ch =fgetc(fp);//从文件中逐个读取字符赋值给ch
}
fclose(fp);
fp=open("......","w");
char str[8]={'a','a','b','b','c','c','d','d','\0'};
int i=0;
while(str[i]!='\0')
{
    fputc(str[i],fp);//将字符逐个写入文件中
}
fclose(fp);

注 :

在此第一个代码块中的feof()函数是判断指针是否到达文件末尾 如果到达则返回true
也可以用ch != EOF来进行替换

fgetc()是从文件中读取字符到ch中 而 fputc()是向文件中写入字符串
fputc()第一个参数为要写入文件之中的字符

4.字符串存取

方式:调用 fgets() fputs()函数

操作:

在此我们不做详细演示

  fgets(str,n,fp);//str为字符数组用来存放在文件中读取的字符 n表示每次读取n个字符  fp即为文件指针
  fputs(str,fp);//第一个参数可以为要写入的字符串、字符数组名、字符型指针或字符串常量 

注:

同字符存取函数 fgets()是将文件中的字符串读取到程序当中来
而fputs()函数把程序中定义的字符串写到文件中去

5.格式化存取

方式:调用fscanf() fprintf()函数

操作:

 int rollnumber;
 char name[20];
 int score;
 FILE *fp=fopen("......","r");
 while(!feof(fp))
 {
    fscanf(fp,"%d%s%d",&rollnumber,name,&score);//将文件中数据 按此种输入方式格式化 并赋值给这三个变量
 }
 fclose(fp);
int rollnumber="123456789"
char name[20]="Jack";
int score=99;
fp=fopen("......","a");
fprintf(fp,"%d%s%d",rollnumber,name,score);//将数据输出到文件中

6. 其他函数

①指针重返函数 :rewind()

 rewind(fp);//将fp重新指向文件开头

②末尾检测函数:feof()

 feof(fp);//检测指针是否到了文件末尾 如到文件末尾则返回true

③随机存取函数:fseek()

FILE *fp=fopen("......","r");
fseek(fp,5,1);
while(!feof(fp))
{
   .......
}
fclose(fp);
解释:

fseek(fp,offset,start);
fp为文件指针 offset 为对于起始点的偏移量
start 为起始点 共有三种状态 0 表示文件开始 1 表示当前位置 2 表示文件末尾

注:

fseek一般用于二进制文件 因为文本文件要发生字符转换,计算位置时往往会发生混乱

④数据块存取函数 :fread() fwrite()

fp=fopen("......","rb+");
char str[50];
fread(str,sizeof(char),25,fp);
.......
fclose(fp);
fp=fopen("......","wb+");
char str[50]="abcdefg";
fwrite(str,sizeof(char),7,fp);
........
fclose(fp);
解释:

fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);

如果是fread中的buffer 则为数据的存放地址 若为 fwrite中的buffer则为所要输出的数据的地址
size:表示每个数据的大小
count:表示有多少个数据
fp:即为文件指针

二.C++文件操作

与C语言不同,C++是通过实例化类对象与文件产生联系,进而对文件进行操作

1. 常用文件输入输出类

ifstream 可读的文件类

ofstream 可写的文件类

fstream 可读可写的文件类

2.打开文件

方式一:调用open()方法

ofstream file;
file.open("......",ios::out|ios::app|ios::binary,0); 

方式二: 构造函数

ofstream file(".......",ios::out||ios::app||ios::binary);

打开模式

open() 第二个参数为文件的打开模式

ios::in 以读的形式打开文件,为ifstream/fstream open()函数的默认参数

ios::out 以写的形式打开文件,为ofstream/fstream open()函数的默认参数

ios::ate 打开的初始位置为文件末尾

ios::trunc 如果文件存在则删了重建 , 为ofstream open()函数的默认参数

ios::binary 打开二进制文件

打开属性

open() 第三个参数为所打开文件的属性

0 :普通文件
1:只读文件
2:隐含文件
4:系统文件

检查文件是否被顺利打开 :is_open()

ofstream file("......");
flie.is_open();//该函数返回为一个bool值

3.关闭文件

方式:调用close()方法

ifstream file;
file.open(".......",ios::in);
.......
file.close();

4.文件的读写

①文本文件

方式: <<(插入器) >>(析取器)

向文件中写入

ofstream file("......");
file<<"hello world";
file.close();

从文件中输入

ifstream file(".......");
string str;
file>>str;
file.close();

②二进制文件

方式:put() get() read() write()

向文件中写入

ofstream file("......",ios::out||ios::app||ios::binary);
file.put('字符');//向文件中写入一个字符
..........

从文件中读取字符

ifstream file("......",ios::binary||ios::in);
char ch;
string str;
file.get(ch);//从文件中读取一个文件并赋值给ch;
file.get(str,128,'\0');//从文件中读取128个字符并赋值给字符串str 遇到'\0'终止
..........

输出数据块

char *str="hello world";
ofstream file("......");
file.write(str,256);//从str中读取256个字符写到文件中
......... 

输入数据块

char *str;
ifstream file(".......");
file.read(str,256);//从文件中读取256个字符到str中

5.其他方法

已定义file

fstream file("........");

①eof()

flie.eof()//到达文件末尾返回非0

②seekg() seekp()

file.seekg(offset,origin);//设置读(指针)位置 offset为从初始位置向后的偏移距离 orgin为初始位置 
file.seekp(offset,origin);//设置写(指针)位置,其余同上
origin的取值

ios::beg :文件开头

ios::cur :文件当前位置

ios::end :文件结尾

  • 12
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值