亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C 文件 I/O:创建、打开、读取、写入和关闭文件

C 文件管理

文件可用于存储大量持久数据。像许多其他语言一样,“C”提供以下文件管理功能,

  1. 创建文件
  2. 打开文件
  3. 读取文件
  4. 写入文件
  5. 关闭文件

以下是“C”中可用的最重要的文件管理功能,

功能 目的 fopen() 创建文件或打开现有文件fclose () 关闭文件fprintf () 将数据块写入文件fscanf() 从文件中读取块数据getc() 从文件中读取单个字符putc () 将单个字符写入文件getw () 从文件中读取一个整数putw () 将整数写入文件fseek () 将文件指针的位置设置为指定位置ftell() 返回文件指针的当前位置rewind () 将文件指针设置在文件的开头


在本教程中,您将学习-

如何创建文件

每当您想使用文件时,第一步就是创建一个文件。文件不过是内存中存储数据的空间。

要使用以下语法在“C”程序中创建文件,

FILE *fp;
fp = fopen ("file_name", "mode");

在上述语法中,文件是标准库中定义的数据结构。

fopen 是一个标准函数,用于打开文件。

fp 是指向文件类型的文件指针。

每当您打开或创建文件时,您都必须指定您要对文件执行的操作。可以创建或打开“C”编程中的文件以用于读/写目的。模式用于指定是否要出于以下任何目的打开文件。以下是“C”编程中可以在处理文件时使用的不同类型的模式。

文件模式 说明 r打开一个文件进行阅读。如果文件处于读取模式,则如果文件已存在于系统中,则不会删除任何数据。w打开文件进行写入。如果文件处于写入模式,则如果文件根本不存在,则会创建一个新文件。如果系统上已经存在文件,则文件内的所有数据都将被截断,并打开以用于写入。a
追加模式打开文件。如果文件处于附加模式,则打开该文件。文件内容不变。r+ 从头开始读写打开w+读写打开,覆盖文件a+读写打开,追加到文件

在给定的语法中,文件名和模式被指定为字符串,因此它们必须始终用双引号括起来。

示例:

#include <stdio.h>
int main() {
FILE *fp;
fp  = fopen ("data.txt", "w");
}

输出:

文件是在您保存代码的同一文件夹中创建的。

您可以指定要创建文件的路径

#include <stdio.h>
int main() {
FILE *fp;
fp  = fopen ("D://data.txt", "w");
}

如何关闭文件

每当对文件的操作结束时,应始终关闭文件。这意味着文件的内容和链接被终止。这样可以防止文件意外损坏。

‘C’ 提供了 fclose 函数来执行文件关闭操作。 fclose的语法如下,

fclose (file_pointer);

示例:

FILE *fp;
fp  = fopen ("data.txt", "r");
fclose (fp);

fclose 函数将文件指针作为参数。然后在 fclose 函数的帮助下关闭与文件指针关联的文件。如果关闭成功则返回 0,如果文件关闭时发生错误则返回 EOF(文件结束)。

关闭文件后,同样的文件指针也可以用于其他文件。

在“C”编程中,程序终止时文件会自动关闭。通过编写 fclose 函数手动关闭文件是一种很好的编程习惯。

写入文件

在 C 中,写入文件时,必须显式添加换行符“\n”。

stdio 库提供了写入文件所需的函数:

下面的程序展示了如何执行写入文件:

fputc() 函数:

#include <stdio.h>
int main() {
        int i;
        FILE * fptr;
        char fn[50];
        char str[] = "Guru99 Rocks\n";
        fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode"
        for (i = 0; str[i] != '\n'; i++) {
            /* write to file using fputc() function */
            fputc(str[i], fptr);
        }
        fclose(fptr);
        return 0;
    }

输出:

上述程序将单个字符写入 fputc_test.txt 文件,直到它到达下一行符号“\n”,这表明该句子已成功写入。过程就是把数组的每个字符都取出来写入文件。

  1. 在上面的程序中,我们创建并以写入模式打开了一个名为 fputc_test.txt 的文件,并声明了我们将写入该文件的字符串。
  2. 我们使用 for 循环逐个字符地写入操作,并将每个字符放入我们的文件中,直到遇到“\n”字符,然后使用 fclose 函数关闭文件。

fputs()函数:

#include <stdio.h>
int main() {
        FILE * fp;
        fp = fopen("fputs_test.txt", "w+");
        fputs("This is Guru99 Tutorial on fputs,", fp);
        fputs("We don't need to use for loop\n", fp);
        fputs("Easier than fputc function\n", fp);
        fclose(fp);
        return (0);
    }

输出:

  1. 在上述程序中,我们创建并以写入模式打开了一个名为 fputs_test.txt 的文件。
  2. 在我们使用 fputs() 函数通过写入三个不同的字符串进行写入操作之后
  3. 然后使用 fclose 函数关闭文件。

fprintf()函数:

#include <stdio.h>
    int main() {
        FILE *fptr;
        fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode"
        /* write to file */
        fprintf(fptr, "Learning C with Guru99\n");
        fclose(fptr);
        return 0;
    }

输出:

  1. 在上面的程序中,我们创建并以写入模式打开了一个名为 fprintf_test.txt 的文件。
  2. 使用 fprintf() 函数通过写入字符串执行写入操作后,使用 fclose 函数关闭文件。

从文件中读取数据

有三种不同的函数专门用于从文件中读取数据

以下程序分别演示了使用 fgets()、fscanf() 和 fgetc() 函数从 fputs_test.txt 文件中读取:

#include <stdio.h>
int main() {
        FILE * file_pointer;
        char buffer[30], c;

        file_pointer = fopen("fprintf_test.txt", "r");
        printf("----read a line----\n");
        fgets(buffer, 50, file_pointer);
        printf("%s\n", buffer);

        printf("----read and parse data----\n");
        file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer
        char str1[10], str2[2], str3[20], str4[2];
        fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4);
        printf("Read String1 |%s|\n", str1);
        printf("Read String2 |%s|\n", str2);
        printf("Read String3 |%s|\n", str3);
        printf("Read String4 |%s|\n", str4);

        printf("----read the entire file----\n");

        file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer
        while ((c = getc(file_pointer)) != EOF) printf("%c", c);

        fclose(file_pointer);
        return 0;
    }

结果:

----read a line----
Learning C with Guru99

----read and parse data----
Read String1 |Learning|
Read String2 |C|
Read String3 |with|
Read String4 |Guru99|
----read the entire file----
Learning C with Guru99

  1. 在上述程序中,我们打开了之前使用 fprintf() 函数编写的名为“fprintf_test.txt”的文件,其中包含“Learning C with Guru99”字符串。我们使用 fgets() 函数读取它,该函数逐行读取,其中缓冲区大小必须足以处理整行。
  2. 我们重新打开文件以将指针文件重置为指向文件的开头。创建各种字符串变量来分别处理每个单词。打印变量以查看其内容。 fscanf() 主要用于从文件中提取和解析数据。
  3. 重新打开文件以将指针文件重置为指向文件的开头。使用 getc() 函数从文件中读取数据并逐字符打印,直到遇到 EOF 语句
  4. 在使用不同的变体执行读取操作文件后,我们再次使用 fclose 函数关闭文件。

使用 getc 和 putc 进行交互式文件读写

这些是最简单的文件操作。 Getc 代表获取字符,而 putc 代表放置字符。这两个函数用于一次只处理一个字符。

以下程序演示了'C'编程中的文件处理功能:

#include <stdio.h>
int main() {
        FILE * fp;
        char c;
        printf("File Handling\n");
        //open a file
        fp = fopen("demo.txt", "w");
        //writing operation
        while ((c = getchar()) != EOF) {
            putc(c, fp);
        }
        //close file
        fclose(fp);
        printf("Data Entered:\n");
        //reading
        fp = fopen("demo.txt", "r");
        while ((c = getc(fp)) != EOF) {
            printf("%c", c);
        }
        fclose(fp);
        return 0;
    }

输出:

  1. 在上面的程序中,我们创建并以写入模式打开了一个名为 demo 的文件。
  2. 执行写操作后,使用 fclose 函数关闭文件。
  3. 我们再次以读取模式打开了一个包含数据的文件。将执行一个while循环,直到找到eof。一旦找到文件末尾,操作将终止,并使用 printf 函数显示数据。
  4. 执行读取操作后文件再次使用 fclose 函数关闭。

总结


C语言

  1. C# 变量和(原始)数据类型
  2. C 输入输出 (I/O)
  3. C 文件处理
  4. Python 文件 I/O
  5. 宇瞻:CV110-SD 和 CV110-MSD 卡在全球推出
  6. 宇瞻:工业级 SV250 SSD 系列,读写速度分别为 560 和 520MB/s
  7. 加入:用于可扩展数据通信的 I/O 模块
  8. Raspberry PI I/O 分线电缆和插板适配器
  9. C - 文件 I/O
  10. C - 头文件
  11. 什么是 I/O 卡及其工作原理
  12. C++ 文件和流