C语言入门教程——3:文件
2011-03-16 10:45
176 查看
C语言的文件操作需要包含头文件<stdio.h>,相关函数通常以f开头。打开的文件在内存中有一个结构体,叫FILE。fopen函数用来打开文件,他返回FILE类型的指针。structRecord{
FILE*f=fopen("c:\\a.txt","r");
if(f==NULL)printf("文件打开失败");
fopen的第一个参数为文件的路径,其中斜杠需要两个代表一个。第二个参数为打开文件的模式,常用的模式有:
r只读
w只写,如果文件已存在,内容会被删除
a追加内容到文件末尾
r+读写
如果需要打开的文件是二进制文件,则需要在上面的模式后面添加一个b字符,例如以读写模式打开一个二进制文件:
if(!(f=fopen("c:/a.bin","rb+")){exit(0);}
操作文本模式打开的文件采用函数fprintf和fscanf,除了多了文件指针作为第一个参数以外,其使用方式与printf和scanf相同。
fwrite用来写二进制文件,
size_tfwrite( constvoid*buffer, size_tsize, size_tcount, FILE*stream );
第一个参数为要写入文件的内存地址,第二个为一个数据块的大小,第三个是数据块的个数,第四个参数为文件指针。
通常将结构体写入二进制文件,例如:
charname[16];
intage;
};
structRecordrecord[8];
inti;
memset(record,0,sizeof(record));//注意sizeof关键字取得是字节大小
for(i=0;i<sizeof(record)/sizeof(Record);i++)
{
sprintf(record[i].name,"I'mrecord%d",i);
record[i].age=i*4;}
if(!(f=fopen("c:/a.bin","wb")){exit(0);}
fwrite(record,sizeof(Record),8,f);
fclose(f);
最后不要忘了用fclose函数关闭打开的文件。
通过fread函数将二进制内容读入内存,例如:
structRecord{
charname[16];
intage;
};
structRecordrecord[8];
if(!(f=fopen("c:/a.bin","rb")){exit(0);}
fread(record,sizeof(Record),8,f);
fclose(f);
和文件相关的函数还有:fseek用于设置当前读取位置,ftell用于获取当前读取位置。
总结
文件分成文本文件(例如.txt,.c,.h等)和二进制文件(例如.rmvb,.exe,.zip等),文件打开方式有:只读(r或者rb)、只写(w或者wb)、追加(a或者ab)、读写(r+或者rb+),其中带b的表示是二进制文件。fopen打开文件后返回文件指针FILE*,其后每个文件的操作都需要带着这个指针,注意有些函数将这个指针作为第一个参数,而另一些则将它作为最后一个参数。文件读写位置只有一个变量(相对于文件开头的偏移量),例如当你以rb+打开一个二进制文件,然后fread进内存32字节,则文件位置编程32,然后再写进去32字节,则写进去的内容被写到文件中偏移32字节处,文件读写位置编程64,用ftell获取当前读写位置,用fseek设置当前读写位置。对于文本文件,可以用fprintf和fscanf进行格式化输入输出。fprintf需要手动添加换行符"\n"在文件中写入换行。scanf系列函数能够自动过滤空白字符(空格、\t\r\n等)(影响中是这样)。最后,不要忘记用fclose关闭文件。作业
维护一个用户名密码文件,该文件的格式为:每一行存储一个用户名密码对,用户名和密码之间用冒号分隔。用户通过命令行输入命令,要求支持的命令如下:load文件路径add用户名密码get用户名remove用户名save文件路径第一个命令加载一个存在的密码文件,该文件是一个文本文件。第二个命令向该密码文件中添加一行记录。第三个命令获取一个用户的密码。第四个为删除一个用户的哪一行。第五个是保存并关闭密码文件。要求:用户名只能由大小写字母数字和下划线组成,第一个字符不能为数字。用户名不能重复。密码不能少于6个字节。提示:load的时候使用r打开文件,这个文件必须存在,将所有记录读入内存并关闭文件。fscanf(fp,"%s:%s",username,password);来读取一行记录。保存的时候使用w打开文件,这个文件可以不存在,如果存在会被自动清空。使用fprintf(fp,"%s:%s",username,password);保存一行记录。假设最大支持256个用户,每个用户的用户名密码都最大为15个字节。可以定义:#defineMAX_USER_NUMBER256#defineMAX_STRING_LENGTH16structUser{charName[MAX_STRING_LENGTH];charPassword[MAX_STRING_LENGTH];};structUserusers[MAX_USER_NUMBER];intuserNumber=0;然后将所有存在的用户读入数组users中。[/code]相关文章推荐
- C语言入门教程 (二十二) 文件操作基本常识
- C语言入门教程 (二十三) 文件操作
- 【C语言入门教程】5.6 函数库和文件
- 小马哥------教你教程—制作MTK平台线刷引导文件方法
- java中使用dom4j写xml文件和简单教程
- ASX文件 终极教程第1/2页
- C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)
- Caffe 深度学习入门教程 Blob,Layer and Net以及对应配置文件的编写
- 用ADO控件操作Excel的.xls文件的最详细的教程(2013.11.29首发)
- 【ROM制作工具】合并分割system.img和userdata.img文件修改教程
- 为Android的apk应用程序文件加壳以防止反编译的教程
- 网站搬家教程,把文件搬迁到新服务器,使用linux scp做网站搬家——linux安装web服务器22
- ffmpeg和SDL教程(一)文件读取和保存
- Scala基础教程(九):提取器、文件I/O
- Linux使用SecureCRT上传和下载文件教程
- Oracle重建控制文件的实例教程
- 无废话WCF入门教程四[WCF的配置文件]
- SQL Server附加数据库报错无法打开物理文件,操作系统错误5的图文解决教程
- Activiti基础教程--01(简介、代码生成Activiti的25张表、Activiti配置文件activiti.cfg.xml生成25张表、在Eclipse上安装Activiti插件)
- 如何获得网页上的swf视频教程文件?