7.1 C语言文件操作
Fopen():返回文件句柄指针。几种打开模式中,r+与w+的区别是,前者对于已存在相同文件名的文件则追加末尾,后者则是删除旧文件建新文件写入数据。
Fclose():传入文件句柄指针。
Fscanf():格式化文件输出。
Fprintf():格式化文件输入。
Fgets():从文件取得指定长度内字符串,直到遇到换行符或是EOF。
Fputs():写入字符串到文件。
Fgetc():从文件取得单个字符,包括’/r’、’/n’、EOF。
Fputc():写入单个字符到文件,包括’/r’、’/n’、EOF。
注意:txt文件中,敲一个回车,会先后放入两个字符’/r’、’/n’到文件中。另外文件模式中,二进制模式与文本模式的区别在于,若文件是char流,后者将”/r/n”转换成”/n”,而前者不做这种转换。
Fseek():定位文件指针。
Rewind():重定位文件指针到文件头。
Feof():只有当到了文件尾才返回非零值。
Fread():按给定单位逐块读文件。
Fwrite():按给定单位逐块写文件。
格式化文件读写
Fscanf()
Fprintf()
对于文本文件、二进制文件打开方式均可用。
字符文件读写
Fgets()
Fputs()
Fgetc()
Fputc()
对于文本文件、二进制文件打开方式均可用。
直接文件读写
Fread()
Fwrite()
对于以非char形式读写数据,在文本文件、二进制文件打开方式均会有问题。
对于以char形式读写数据,文本文件、二进制文件打开方式均可用。
可看看以下试验
代码:
FILE *p = NULL;
char filename[] = "d://it_study//c++_dev//project//file_test1//6.txt";
char co;
int no;
printf("********/nr/n");
if((p = fopen(filename,"r")) == NULL)
printf("error open/n");
//
printf("co/n");
while(feof(p) == 0)
{
if(fread(&co,sizeof(char),1,p) < 1)
printf("error read/n");
if(!(co == ' ' || co =='/r' || co == '/n'))
{
printf("%c/n",co);
}
co = ' ';
}
co = ' ';
//
printf("co no/n");
rewind(p);
if(fread(&no,sizeof(int),1,p) < 1)
printf("error read/n");
printf("%d/n",no);
if(fread(&no,sizeof(int),1,p) < 1)
printf("error read/n");
printf("%d/n",no);
if(fread(&no,sizeof(int),1,p) < 1)
printf("error read/n");
printf("%d/n",no);
no = 0;
co = ' ';
fclose(p);
printf("close/n");
printf("********/nrb/n");
if((p = fopen(filename,"rb")) == NULL)
printf("error open/n");
//
printf("co/n");
while(feof(p) == 0)
{
if(fread(&co,sizeof(char),1,p) < 1)
printf("error read/n");
if(!(co == ' ' || co =='/r' || co == '/n'))
{
printf("%c/n",co);
}
co = ' ';
}
co = ' ';
//
printf("co no/n");
rewind(p);
if(fread(&no,sizeof(int),1,p) < 1)
printf("error read/n");
printf("%d/n",no);
if(fread(&no,sizeof(int),1,p) < 1)
printf("error read/n");
printf("%d/n",no);
if(fread(&no,sizeof(int),1,p) < 1)
printf("error read/n");
printf("%d/n",no);
no = 0;
co = ' ';
fclose(p);
printf("close/n");
printf("********/nwb/n");
if((p = fopen(filename,"wb")) == NULL)
printf("error open/n");
//
printf("co no/n");
co = 'a';
fwrite(&co,sizeof(char),1,p);
no = 1;
fwrite(&no,sizeof(int),1,p);
//
fclose(p);
printf("close/n");
stdout输出:
********
r
co
1
a
error read
co no
error read
6365233
error read
6365233
error read
6365233
close
********
rb
co
1
a
error read
co no
error read
6365233
error read
6365233
error read
6365233
close
********
wb
co no
close
6.txt输入:
1 a
6.txt输出:
a
UE中十六进制形式查看如下
总结,一般来说,当以文本方式打开时,用格式化文件读写、字符文件读写;当以二进制方式打开时,用直接文件读写,并且以char形式读写数据。
注意:试验中是int形式与char形式,也许描述中应该改为非单字符形式与单字符形式。
7.2 C++语言文件操作
Fstream:文件读写类,默认是用读/写模式打开。
Ifstream:文件读写类,默认用读模式打开。
Ofstream:文件读写类,默认用写模式打开。
<<:写入文件流。
>>:读入文件流。
Seekg:定位读指针。
Seekp:定位写指针。