您的位置:首页 > 编程语言 > C语言/C++

C语言入门教程——3:文件

2011-03-16 10:45 176 查看
C语言的文件操作需要包含头文件<stdio.h>,相关函数通常以f开头。打开的文件在内存中有一个结构体,叫FILE。fopen函数用来打开文件,他返回FILE类型的指针。
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
);
第一个参数为要写入文件的内存地址,第二个为一个数据块的大小,第三个是数据块的个数,第四个参数为文件指针。
通常将结构体写入二进制文件,例如:
structRecord{
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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: