13-1. 文件操作(1)

  • 学习人数 30K+
  • 适合所有人群学习
avatar
林耿亮

你好编程主讲老师

在之前的章节中,我们将程序关闭后,程序中的数据将全部清空。下次启动程序后,一切都得从头开始。那么,怎样才能将程序中的数据保存。待下次重新启动程序时,复现之前保存的数据呢?

为了实现这种需求,我们可以借助文件

在需要时,可以将程序中的数据保存为一个文件。待下次重新启动程序时,从之前保存的文件中提取数据。这样,程序就不会在重启后失忆了。

1. 创建并写入文件

为了操作文件,我们需要借助几个在头文件stdio.h中声明的库函数。

创建或打开文件fopen函数。

fopen函数原型如下:

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

输入:

const char * filename文件路径,可以使用相对路径或绝对路径。 const char * mode操作模式

输出:

如果文件创建或打开成功,则返回一个指针。这个指针指向一个记录文件信息的结构FILE。其他各种文件操作函数,需要这个结构指针才能对fopen打开或创建的文件进行操作。我们无需过多地关注这个结构的具体组成,仅需要将这个结构指针传递给各种文件操作函数即可。

例如,我们使用相对路径data.txt,将在当前目录下,创建一个名为data.txt的文件。

当然,你也可以在windows上使用形如F:/projects/data.txt的绝对路径,在F盘下的project文件夹中,创建data.txt文件。

#include <stdio.h>

int main()
{
    //  创建一个名为data.txt的文件
    FILE *pFile = fopen("data.txt", "w");
    if(pFile == NULL)
    {
        //  文件创建失败
        return -1;
    }
    //  文件创建成功
    return 0;
}

函数fopen的第一个参数为字符串,内容为需要操作的文件路径,第二个参数也为字符串,内容为文件的操作模式。

先介绍两种模式:

"r"模式,读模式,取自read的首字母。对文件进行读取操作。 "w"模式,写模式,取自write的首字母。对文件进行写入操作。如果文件存在,清空原文件内容,不存在则创建一个新文件。

程序运行后,我们即可在当前目录下,看到data.txt。当然,我们没有写入任何内容。使用文本编译器打开后,我们发现是一个空文件。

空文件

之前,我们使用过printf在控制台上输出一串字符。若需要将字符串输出到文件内,有一个非常类似的函数fprintf。它就相当于在函数printf第一个参数前,加了一个文件结构指针参数,用于指明操作哪个文件。其他的使用方法和printf几乎一致。

fprintf的函数原型:

int fprintf (FILE * stream, const char * format, ...);

下面是输出3个数据的示例:

使用函数printf打印到控制台:

int n = 123;
double f = 3.1415;
char ch = 'A';
printf("%d\n", n);
printf("%f\n", f);
printf("%c\n", ch);

使用函数fprintf输出到文件:

int n = 123;
double f = 3.1415;
char ch = 'A';
fprintf(pFile, "%d\n", n);
fprintf(pFile, "%f\n", f);
fprintf(pFile, "%c\n", ch);

虽然程序结束会为我们自动关闭文件。如果在程序运行期间,不需要再次操作文件了,可以调用函数fclose关闭文件。并且,关闭所有资源再结束程序是一个良好的编程习惯。

fclose(pFile);

完整代码如下:

#include <stdio.h>

int main()
{
    //  创建一个名为data.txt的文件
    FILE *pFile = fopen("data.txt", "w");
    if(pFile == NULL)
    {
        //  文件创建失败
        return -1;
    }
    //  文件创建成功

    int n = 123;
    double f = 3.1415;
    char ch = 'A';

    // fprintf第一个参数为文件结构指针,其后参数与printf一致
    fprintf(pFile, "%d\n", n);
    fprintf(pFile, "%f\n", f);
    fprintf(pFile, "%c\n", ch);

    //  关闭文件
    fclose(pFile);
    return 0;
}

再次打开文件data.txt,我们可以发现,里面有刚刚写入的三个变量的值,并且每打印一个变量换行一次。

文件中已有数据