c语言c文件,C语言C 文件操作

文章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<

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 :文件结尾

关键词:c

c语言

文件操作,c语言,语言,文件,操作

题目内容:小明同学特别喜欢买书看书。由于书较多,摆放杂乱,找起来非常麻烦。这学期小明同学上了数据结构与程序设计课后,决定改变这种状况:用C开发一个小型图书管理系统。系统中包含的图书信息有:书名、作者、出版社、出版日期等。首先,图书管理系统对已有的书(原始书库,存放在一个文本文件中)按书名字典序进行(按书名中各字符的ASCII码值由小到大排序)摆放(即将原始无序的图书信息文件生成一个有序的文件,即新书库),以便查找。该管理系统可以对新书库中图书条目进行如下操作: 1.录入。新增书录入到书库中(即从输入中读入一条图书信息插入到已排序好的图按书文件相关位置处) 2.查找。按书名或书名中关键字信息在书库中查找相关图书信息,若有多本书,按字典序输出。 3.删除。输入书名或书名中关键字信息,从书库中查找到相关书并将其删除,并更新书库。 【输入形式】 原始的图书信息(原始书库)保存在当前目录下的books.txt中。 用户操作从控制台读入,首先输入操作功能序号(1代表录入操作,2代表查找操作,3代表删除操作,0代表将已更新的图书信息保存到书库中并退出程序),然后在下一行输入相应的操作信息(录入操作后要输入一条图书信息,查找和删除操作后只要输入书名或书名中部分信息)。程序支行过程中可以进行多次操作,直到退出(输入操作0)程序。 要求: 1、原始文件中的图书信息与录入的图书信息格式相同,每条图书信息都在一行上,包括书名(不超过50个字符)、作者(不超过20个字符)、出版社(不超过30个字符)和出版日期(不超过10个字符),只由英文字母和下划线组成,用一个空格分隔。图书信息总条数不会超过500. 2、下划线字符参加排序。 3、图书不会重名。 【输出形式】 进行录入和删除操作,系统会更新图书信息,但不会在控制台窗口显示任何信息。 进行查找操作后,将在控制台按书名字典序分行输出查找到的图书信息,书名占50个字符宽度,作者占20个字符宽度,出版社占30个字符宽度,出版日期占10个字符宽度,都靠左对齐输出。 最终按字典排序的图书信息保存在当前目录下的ordered.txt中,每条图书信息占一行,格式与查找输出的图书信息相同
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值