小言_互联网的博客

C语言/C++ 文件操作

388人阅读  评论(0)

一、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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场