文件的输入/输出

文件是什么?

文件(file通常是在磁盘或固态硬盘上的一段已命名的存储区。它可以用来存储程序、文档、数据、书信、表格、图形、照片、视频和其他许多种类的信息。有时,需要程序从文件中读取信息或把信息写入文件。C提供了强大的文件通信方式,可以在程序中打开文件,然后使用特殊的I/O函数读取文件信息或把信息写入文件。

C把文件看作是一系列连续的字节,每个字节都能被单独读取。

标准文件

C程序会自动打开3个文件,它们被称为标准输入 (standard input)、标准输出(standrad output)和标准错误输出(standrad error output) 。

在默认情况下:

  • 标准输入是系统的普通输入设备,通常是键盘。
  • 标准输出、标准错误输出是系统的普通输出设备,通常是显示屏。

通常,

  • 标准输入为程序提供输入,它是getchar()、scanf()使用的文件;
  • 程序输出到标准输出,它是putchar()、puts()和printf() 使用的文件;
  • 标准错误输出提供了一个逻辑上不同的地方发来的错误信息。例如,如果把输出发送给文件而不是屏幕,那么发送至标准错误输出的内容仍然会被发送至屏幕上。

fopen()函数

FILE * fopen ( const char * filename, const char * mode );

该函数用于打开文件。

参数

  • 第一个参数是待打开文件的名称,更确切地说是一个包含该文件名的字符串地址。
  • 第二个参数是一个字符串,指定待打开文件的模式

下面是fopen()函数的模式字符串

“r” 读:打开文件进行输入操作。该文件必须存在。
“w”
  1. 写:为输出操作创建一个空文件。如果同名文件已存在,则丢弃其内容,并将该文件视为新的空文件。
“a” 附加:打开文件以在文件末尾输出。输出操作始终在文件末尾写入数据,并将其展开。重新定位操作(fseek、fsetpos、rewind)将被忽略。如果该文件不存在,则创建该文件。
“r+” 读取/更新:打开文件进行更新(用于输入和输出)。该文件必须存在。
“w+” 写入/更新:创建一个空文件并将其打开以进行更新(用于输入和输出)。如果同名文件已存在,则丢弃其内容,并将该文件视为新的空文件。
“a+” 追加/更新:打开一个文件进行更新(用于输入和输出),所有输出操作都在文件末尾写入数据。重新定位操作(fseek、fsetpos、倒带)会影响下一个输入操作,但输出操作会将位置移回文件末尾。如果该文件不存在,则创建该文件。

注意:

  • 为了将文件作为二进制文件打开,模式字符串中必须包含“b”字符。这个额外的“b”字符可以附加在字符串的末尾(从而形成以下复合模式:“rb”,“wb”,“ab”,“r +b”,“w + b”,“a + b”),也可以插入在字母和混合模式的“+”符号之间(“rb +”,“wb+”,“ab +”)。
  • 带x的写模式有哪些特性?
  1. 如果以传统的一种写模式(不带x的“w"模式)打开一个现有的文件,fopen()函数会把该函数的长度截为0,也就是说该文件的内容会被删除,以便程序在一个空白文件中开始操作;使用带x的写模式,即使fopen()函数操作失败,原文件的内容也不会被删除。
  2. x的独占性:其他程序无法访问正在被打开的文件。
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() 函数

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:fprintf() 、fscanf()、fgets()、fputs() 

文件I\O函数一个重要的特性就是,都要用FILE指针指定待处理的文件。


  • fprintf()和fscanf()函数

示例:

#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 ()函数
第一个参数 第二个参数 第三个参数
fgets() 存储输入位置的地址 一个整数,表示待输入字符串的大小 文件执政
fputs() 字符串地址 文件指针

 

 

 

 

 

 

你可能感兴趣的:(c语言,c++,青少年编程)