一、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 :文件结尾
转载:https://blog.csdn.net/m0_51111980/article/details/115917516