文件(file)通常是在磁盘或固态硬盘上的一段已命名的存储区。它可以用来存储程序、文档、数据、书信、表格、图形、照片、视频和其他许多种类的信息。有时,需要程序从文件中读取信息或把信息写入文件。C提供了强大的文件通信方式,可以在程序中打开文件,然后使用特殊的I/O函数读取文件信息或把信息写入文件。
C把文件看作是一系列连续的字节,每个字节都能被单独读取。
标准文件
C程序会自动打开3个文件,它们被称为标准输入 (standard input)、标准输出(standrad output)和标准错误输出(standrad error output) 。
在默认情况下:
通常,
FILE * fopen ( const char * filename, const char * mode );
该函数用于打开文件。
参数
下面是fopen()函数的模式字符串
“r” | 读:打开文件进行输入操作。该文件必须存在。 |
“w” |
|
“a” | 附加:打开文件以在文件末尾输出。输出操作始终在文件末尾写入数据,并将其展开。重新定位操作(fseek、fsetpos、rewind)将被忽略。如果该文件不存在,则创建该文件。 |
“r+” | 读取/更新:打开文件进行更新(用于输入和输出)。该文件必须存在。 |
“w+” | 写入/更新:创建一个空文件并将其打开以进行更新(用于输入和输出)。如果同名文件已存在,则丢弃其内容,并将该文件视为新的空文件。 |
“a+” | 追加/更新:打开一个文件进行更新(用于输入和输出),所有输出操作都在文件末尾写入数据。重新定位操作(fseek、fsetpos、倒带)会影响下一个输入操作,但输出操作会将位置移回文件末尾。如果该文件不存在,则创建该文件。 |
注意:
fopen("book.txt","r");//以读模式打开book.txt文件
fopen("E:\"visualstudio代码文件\"Project5\\Debug","w+b");
//以二进制的写模式打开E:\visualstudio代码文件\Project5\Debug路径下的文件(注意写路径时转义字符的转换)
返回值
程序成功打开文件后,fopen()函数将返回文件指针(file pointer),其他I/O函数可以使用这个指针指定该文件。
FILE *fp;// 文件指针fp
char ch;
fp=fopen("book.txt","r");
ch=getchar(fp);//获得fp指向的文件的第一个字符
putc(ch,stdout);
fclose()函数用于关闭fp指定的文件。对于较正式的程序,应该检查是否成功关闭文件。如果成功关闭,fclose()函数返回0,否则返回EOF;
if(close(fp)!=0)
printf("关闭文件%s失败\n",argv[1]);
如果磁盘已满、移动硬盘被移除或出现I\O错误,都会导致调用fclose()函数失败。
标准文件 |
文件指针 | 通常使用的设备 |
---|---|---|
标准输入 | stdin | 键盘 |
标准输出 | stdout | 显示器 |
标准错误 | stderr | 显示器 |
注意:这些文件指针都是指向FILE的指针,所以它们可以用作标准I\O的函数的参数。
文件I\O函数一个重要的特性就是,都要用FILE指针指定待处理的文件。
示例:
#include
#include
#include
#define MAX 20
int main()
{
FILE * fp;//定义文件指针
char words[MAX];
if((fp=fopen("cup","a+"))==NULL)
{
fprintf(stdout,"不能打开\"cup\"文件\n");//stdout是与标准输出相关联的文件指针
exit(EXIT_FAILURE);
}
puts("添加单词到文件中;请在写完输完单词后换行输入#");
while((fscanf(stdin,"%20s",words)==1)&&words[0]!='#')//fscanf()成功读取一个字符串返回1,
{
fprintf(fp,"%s",words);//将字符串输出到指针fp指向的文件
}
puts("文件内容如下\n");
rewind(fp); //返回文件开始处:方便打印整个文件内容
while(fscanf(fp,"s",words)==1)
{
puts(words);
}
if(fclose(fp)!=0)
{
fprintf(stderr,"关闭失败\n");
}
system("pause");
return 0;
}
第一个参数 | 第二个参数 | 第三个参数 | |
fgets() | 存储输入位置的地址 | 一个整数,表示待输入字符串的大小 | 文件执政 |
fputs() | 字符串地址 | 文件指针 | 无 |