2012年(41)
分类: C/C++
2012-03-15 11:12:27
对于一个程序员来说,特别是对嵌入式程序员来说,对文件的操作是非常【频繁的,所以,对文件操作的知识就需要相当的熟悉,下面是我文件操作的一些总结。
文件部分由几个常用的函数,总结如下:
打开关闭文件函数:fopen()和fclose();
字符读写函数: fgetc()和fputc();
字符串读写函数: fgets()和fputs();
数据段读写函数: fread()和fwrite();
格式化读写函数: fprintf()和fscanf();
标准文件操作的操作对文件进行操作之前,必须先打开文件,使用完毕后,应该立即关闭,以免数据丢失。
1、打开关闭文件函数:fopen()和fclose()
ANSI C规定了标准输入输出函数库,用fopen()函数来实现打开文件,用fclose()函数来实现关闭打开的文件。
fopen()函数的一般的形式是:
FILE *fp;
fopen(文件名,使用文件方式);
fclose()函数的一般形式是:
fclose(文件指针);
参数介绍:
文件名:顾名思义,就是要打开的文件的名称。
图 1
说明:
1) 用“r“方式打开的文件只能用于湘计算机输入而不能用作向该文件输出数据, 而且该文件必须是存在的文件,不能用“r”方式打开一个不存在的文件。
2) 用“w”方式打开的文件只能用于向该文件写数据,而不能用于向计算机输入, 如果该文件不存在,则在打开时新建一个以指定的文件名命名的文件。
3) 如果希望向文件末尾追加新的数据而又不希望删除原来的数据,则应该用“a” 方式打开,但是此文件必须是存在的。
4) 用“r+”、“w+”、“a+”方式打开的文件既可以用来输入数据,也可以用来输出 数据。
5) 在程序运行的时候,系统自动打开三个标准文件:标准输入、标准输出、标准 出错输出。
文件指针:文件打开时所带回的指着赋给了fp,通过fp把改文件关闭。
2、字符读写函数:fgetc()和fputc()
将一个字符写到磁盘文件上去,使用fgetc()函数。其一般调用的格式为:
fputc(ch,fp)
其中ch是要输出的字符,可以是字符常量,可以是字符变量。将字符ch输出到fp所指向的文件中去。
从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。fgetc()函数的调用方式为:
ch=fgetc(fp)
fp为一个文件型的指针变量,ch为字符变量。fgetc函数带回一个字符,赋给ch。
例1:使用fgetc()函数读取文件的信息。
#include
#include
void main()
{
FILE *fp;
char ch;
if((fp=fopen("exam.c","r+"))==NULL)
{
printf("file open failer!\n");
return;
}
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
return 0;
}
运行该函数,将会在屏幕终端上看到exam.c文件所有信息。
3、数据段读写函数: fread()和fwrite()
fread()函数和fwrite()函数用来读写一个数据块。它们的一般调用形式为:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
其中:
buffer:是一个指针。对fread()来说,它是读入数据的存放地址;对于fwrite() 来说,是要输出数据的地址。
size:要读写的字节数。
count:要进行读写多少个size字节的数据项。
fp:文件指针。
4、格式化读写函数: fprintf()和fscanf()
fprintf()函数、fscanl()函数、printf()函数、scanf()函数作用相仿,都是格式化的读写函数。只有一点不同,fprintf和fscanf函数的读写对象不是终端而是磁盘文件。它们的一般调用方式为:
fprintf(文件指针,格式字符串,输出列表);
fscanf(文件指针,格式字符串,输入列表);
5、字符串读写函数: fgets()和fputs()
fgets函数的作用是从指定文件读入一个字符串到指定缓冲中。如:fgets(str,n,fp),从fp所指向的文件读取n-1个字符,在末尾加上一个’\0’,所以保存到字符数组str中的字符数位n个。
fputs函数的作用是指向指定的文件输出一个字符串。如:fputs(“china”,fp),把字符串“china”输出到fp指向为文件。
6、文件操作应该举例
例1:向文件末尾追加信息
方法一:以“a”的形式打开文件。代码如下:
#include
#include
int main()
{
FILE *fp;
char *buf="scao";
//以“a”形式打开文件
if((fp=fopen("exam.c","a"))==NULL)
{
printf("open file failer!\n");
return;
}
if(fwrite(buf,1,strlen(buf),fp)==NULL)
{
printf("file write error!\n");
return;
}
fclose(fp);
return 0;
}
方法二:通过文件定位函数,定位到文件末尾,然后再向文件追加内容。具体代码如下:
#include
#include
int main()
{
FILE *fp;
char *buf="scao";
if((fp=fopen("exam.c","r+"))==NULL)
{
printf("open file failer!\n");
return;
}
fseek(fp,0,SEEK_END);
if(fwrite(buf,1,strlen(buf),fp)==NULL)
{
printf("file write error!\n");
return;
}
rewind(fp);//使指针重新返回到文件的开头
fclose(fp);
return 0;
}
例 2:文件复制。代码如下:
#include
#include
void filecopy(FILE *src1,FILE *dst1)
{
char c;
while((c = getc(src1)) != EOF)
{
putc(c,dst1);
}
}
int main()
{
FILE *src,*dst;
src=fopen("exam.c","r+");
if(src==NULL)
{
printf("cann't open source file.\n");
return 0;
}
dst=fopen("max.c","r+"); //把这里的“r+”改为“a“就可以实现在文件末尾追加一段字符的功能
if(dst==NULL){
printf("cant'to open destination file\n");
return 0;
}
filecopy(src,dst); //调用文件复制函数
fclose(src);
fclose(dst);
return 0;
}
以上是我认为在实际文件操作过程中使用较频繁的文件操作函数以及一些常见的文件操作实例。