C 语言文件输入/输出

原文:https://www.studytonight.com/c/file-input-output.php

一个文件代表磁盘上存储一组相关数据的字节序列。文件是为永久存储数据而创建的。这是一个现成的结构。

在 C 语言中,我们使用文件类型的结构指针来声明一个文件。

FILE *fp;

c 提供了许多有助于执行基本文件操作的功能。以下是功能,

| 功能 | 描述 | | fopen() | 创建新文件或打开现有文件 | | fclose() | 关闭文件 | | getc() | 从文件中读取字符 | | putc() | 将字符写入文件 | | fscanf() | 从文件中读取一组数据 | | fprintf() | 将一组数据写入文件 | | getw() | 从文件中读取整数 | | 普托() | 将整数写入文件 | | fseek() | 将位置设置为所需的点 | | ftell() | 给出文件中的当前位置 | | 倒带() | 将位置设置为起点 |


打开文件或创建文件

fopen()功能用于创建新文件或打开现有文件。

一般语法:

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

这里,*fp是文件指针(FILE *fp),它将保存对打开(或创建)文件的引用。

文件名是要打开的文件的名称,模式指定打开文件的目的。模式可以是以下类型:

| 方式 | 描述 | | r | 以阅读模式打开文本文件 | | w | 以书写模式打开或创建文本文件。 | | a | 以追加模式打开文本文件 | | r+ | 以读写模式打开文本文件 | | w+ | 以读写模式打开文本文件 | | a+ | 以读写模式打开文本文件 | | 元素铷的符号 | 以读取模式打开二进制文件 | | 世界银行 | 以写入模式打开或创建二进制文件 | | 腹肌 | 以追加模式打开二进制文件 | | rb+ | 以读写模式打开二进制文件 | | wb+ | 以读写模式打开二进制文件 | | ab+ | 以读写模式打开二进制文件 |


关闭文件

fclose()功能用于关闭已经打开的文件。

一般语法:

int fclose( FILE *fp);

这里fclose()功能关闭文件,成功返回,如果关闭文件有错误则返回 EOF 。这个 EOF 是头文件 stdio.h 中定义的常量。


文件的输入/输出操作

在上表中,我们讨论了执行文件读写的各种文件输入/输出功能。getc()putc()是最简单的函数,可以用来读写文件中的单个字符。

#include<stdio.h>

int main()
{
    FILE *fp;
    char ch;
    fp = fopen("one.txt", "w");
    printf("Enter data...");
    while( (ch = getchar()) != EOF) {
        putc(ch, fp);
    }
    fclose(fp);
    fp = fopen("one.txt", "r");

    while( (ch = **getc**(fp)! = EOF)
    printf("%c",ch);

    // closing the file pointer
    fclose(fp);

    return 0;
}

使用fprintf()fscanf()读取和写入文件

#include<stdio.h>

struct emp
{
    char name[10];
    int age;
};

void main()
{
    struct emp e;
    FILE *p,*q;
    p = fopen("one.txt", "a");
    q = fopen("one.txt", "r");
    printf("Enter Name and Age:");
    scanf("%s %d", e.name, &e.age);
    fprintf(p,"%s %d", e.name, e.age);
    fclose(p);
    do
    {
        fscanf(q,"%s %d", e.name, e.age);
        printf("%s %d", e.name, e.age);
    }
    while(!feof(q));
}

在这个程序中,我们创建了两个文件指针,它们都指向同一个文件,但是模式不同。

fprintf()功能直接写入文件,而fscanf()从文件中读取,然后可以使用标准的printf()功能打印在控制台上。


追加模式和写入模式的区别

写(w)模式和追加(a)模式,而打开文件几乎是一样的。两者都用于写入文件。在这两种模式下,如果新文件还不存在,就会创建新文件。

它们唯一的区别是,当你模式下打开一个文件时,文件被重置,导致文件中已经存在的任何数据被删除。在附加模式下,这不会发生。追加模式用于向文件的现有数据(如果有)追加或添加数据。因此,当您在追加(a)模式下打开一个文件时,光标位于文件中当前数据的末尾。


二进制文件的读写

二进制文件类似于文本文件,但它只包含大的数字数据。在上面的打开模式表中提到了打开模式。

fread()fwrite()函数用来读写的是二进制文件。

fwrite(data-element-to-be-written, size_of_elements, number_of_elements, pointer-to-file);

fread()也是用同样的方式,用同样的参数像fwrite()函数。下面提到的是一个写入二进制文件的简单例子

const char *mytext = "The quick brown fox jumps over the lazy dog";   
FILE *bfp= fopen("test.txt", "wb");   
if (bfp) 
{     
    fwrite(mytext, sizeof(char), strlen(mytext), bfp);     
    fclose(bfp);   
}

fseek()ftell()rewind()功能

  • fseek():用于使用 fseek 功能将读数控件移动到不同的位置。
  • ftell():告知文件指针中光标当前位置的字节位置。
  • rewind():将控件移动到文件开头。

一些文件处理程序示例