学科分类
目录
C语言

文件写入

在程序开发中,经常需要对文件进行读写操作。文件的读写操作分为两种形式,一种是以字符的形式进行写入,一种是以二进制的形式进行写入。本节将针对文件写入的相关内容进行详细地讲解。

1、使用fputc()函数向文件写入字符

fputc()函数用于向文件中写入一个字符,函数声明如下:

int fputc(int c, FILE* stream);

上述函数声明中,c表示写入的内容,stream表示一个文件指针。函数返回值的类型为int类型,即返回成功写入的字符,写入失败返回EOF。

接下来通过一个具体案例演示如何使用fputc()函数向文件写入字符,如例1所示。

例1 writeFile.c

 1    #define _CRT_SECURE_NO_WARNINGS
 2    #include <stdio.h>
 3    #include <stdlib.h>
 4    int main()
 5    {
 6        FILE *fp;
 7        int i=0;
 8        char arr[]="I Like C Program";
 9        fp = fopen("hello.txt", "w");    // 以只写的方式打开一个文件,若文件不存在则创建文件
 10        if (fp == NULL)                    // 若文件打开失败,则输出提示信息
 11        {
 12            printf("打开文件失败!\n");
 13            exit(0);                    // 退出程序
 14        }
 15        while (arr[i] != '\0')            // 遍历字符数组中的每一个字符
 16        {
 17            fputc(arr[i], fp);            // 将字符写入文件中
 18            i++;                        // 将字符数组的下标后移一位
 19        }
 20        fclose(fp);                        // 关闭文件,释放资源
 21        return 0;
 22    }

在例1中,第8行代码定义一个字符数组;第9行代码以只写的方式打开hello.txt文件;第15~19行代码通过while循环遍历字符数组将数组中的字符,并通过fputc()函数写入到文件中;第20行调用fclose()函数关闭文件。

例1运行成功后,在项目根目录下打开hello.txt文件,可以看到该文件中的内容如图1所示。

图1 hello.txt文件内容

2、使用fputs()函数向文件写入字符串

fputs()函数用于将字符串写入文件,函数声明如下:

int fputs(const char str, FILE stream);

上述函数声明中,参数str表示指向待写入的字符串的字符指针;参数stream表示文件指针。

fputs()函数向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’),如果写入成功,函数返回0,否则返回EOF。

接下来通过一个具体案例演示如何使用fputs()函数向文件写入字符串,如例2所示。

例2 writeString.c

 1    #define _CRT_SECURE_NO_WARNINGS
 2    #include <stdio.h>
 3    #include <stdlib.h>
 4    int main()
 5    {
 6        FILE * fp;                        // 声明文件指针
 7        char * str[3];                    // 定义字符数组的指针
 8        int i;
 9        str[0] = "I Like C Program\n";    // 初始化数组指针指向的字符串
 10        str[1] = "It Is Amazing\n";
 11        str[2] = "It Is Interesting\n";
 12        fp = fopen("hello.txt", "w");    // 打开文件,若文件不存在则创建文件
 13        if(fp == NULL)                    // 打开文件失败,打印出错信息
 14        {
 15            printf("打开文件失败!\n");
 16            exit(0);                    // 退出程序
 17        }
 18        for (i = 0; i < 3; i++)
 19        {
 20            fputs(str[i], fp);            // 将字符数组str中的整个字符串写入文件中
 21        }
 22        fclose(fp);                        // 关闭文件,释放资源
 23        return 0
 24    }

在例2中,第5行代码定义了一个指针数组,第7~9行代码初始化了指针数组,第10行代码以只写的方式打开hello.txt文件,第16~19行代码在for循环中使用fputs()函数将字符数串写入到文件中;第20行代码调用fclose()函数关闭文件。

程序运行成功后,在项目根目录中打开hello.txt文件,发现字符串被成功写入文件,文件内容如图2所示。

图2 hello.txt文件内容

3、使用fwrite()函数向文件写入数据

fwrite()函数用于以二进制的形式将数据写入文件,函数声明如下:

size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream);

上述函数声明中,参数ptr表示指向待写入数据的指针;参数size表示待写入数据的字节数;参数nmemb表示待写入size个字节的数据的个数;参数stream表示文件指针;返回值类型size_t,即无符号整型,写入成功返回写入的数据个数,写入失败返回0。

接下来通过一个具体案例来学习如何使用fwrite()函数向文件写数据,如例3所示。

例3 writeBin.c

 1    #define _CRT_SECURE_NO_WARNINGS
 2    #include <stdio.h>
 3    #include <stdlib.h>
 4    int main()
 5    {
 6        FILE * fp;                        // 声明文件指针
 7        char str[26];                    // 声明数据数组
 8        int i, num;
 9        fp = fopen("fread.txt", "w");    // 以只写方式打开一个文件,如果文件不存在则创建
 10        if (fp == NULL)                    // 打开文件失败,打印出错信息
 11        {
 12            printf("文件打开失败\n");
 13            exit(0);                    // 退出程序
 14        }
 15        for (i = 0; i < 26; i++)        // 将26个字符循环写入数据数组
 16        {
 17            str[i] = 'a' + i;
 18        }
 19        num = fwrite(str, sizeof(char) * 13, 2, fp);    // 将数据数组的内容写入到文件中
 20        printf("数据的写入次数是:%d\n", num);              // 打印数据的写入次数
 21        fclose(fp);                                        // 关闭文件,释放资源
 22        return 0;
 23    }

例3运行结果如图3所示。

图3 例3运行结果

程序执行成功后,会在项目根目录中生成fread.txt文件,打开fread.txt文件,发现字符串被成功写入文件,文件内容如图4所示。

图4 fread.txt文件内容

在例4中,第7行代码初始化一个数据数组;第9行代码以只写的方式打开fread.txt文件;第15~18行代码通过for循环将26个小写字母写入str数组;第19行代码调用fwrite()函数将str数组的数据写入到文件中e;第21行代码调用fclose()函数关闭文件。

4、使用fprintf()函数向文件写入数据

fprintf()函数用于将数据格式化写入文件,函数声明如下:

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

上述函数声明中,参数stream表示文件指针;参数format表示以什么样的字符串格式输出到文件中;该函数根据指定的字符串格式将字符串写入到指定的文件中。如果函数调用成功,该函数的返回值是输出的字符数;否则,返回EOF。

接下来通过一个具体案例来演示如何使用fprintf()函数向文件写数据,如例4所示。

例4 fprintfFile.c

 1    #define _CRT_SECURE_NO_WARNINGS
 2    #include <stdio.h>
 3    #include <stdlib.h>
 4    void main()
 5    {
 6        FILE *fp;
 7        fp = fopen("hello.txt", "w"); // 以只写的方式打开一个文件,若文件不存在则创建文件
 8        if (fp == NULL)                   // 若文件打开失败,则输出提示信息
 9        {
 10            printf("打开文件失败!\n");
 11            exit(0);                // 退出程序
 12        }
 13        // 将格式化的字符串输出到文件中
 14        fprintf(fp, "I am a %s, I am %d years old.", "student", 18);
 15        fclose(fp);                    // 关闭文件,释放资源
 16    }

在例4中,第7行代码以只写的方式打开hello.txt文件;第14行代码调用fprintf()函数格式化字符串并将字符串写入文件中;第15行代码调用fclose()函数关闭文件。

程序运行成功后,会在当前项目根目录下生成一个hello.txt文件,打开文件,发现字符串被成功写入文件hello.txt中,文件内容如图5所示。

图5 hellow.txt文件内容

点击此处
隐藏目录