📜  C |输入和输出|问题3(1)

📅  最后修改于: 2023-12-03 14:39:41.028000             🧑  作者: Mango

C语言-输入和输出-问题3

介绍

在C语言中,一般使用printf函数输出字符串,scanf函数输入变量。但是,如果需要输出或输入整个文件,这两个函数就显得力不足了。

C语言提供了一组文件I/O函数,使得我们可以处理磁盘上的文件。其中最常见的是fopen、fclose、fread、fwrite、fseek和ftell函数。利用这些函数,我们可以从一个文本文件中读取数据并将数据写入到另一个文本文件中。

fopen函数

fopen函数用于打开一个文件。它的原型如下:

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

其中,filename是要打开的文件名,mode指定打开的方式。fopen返回一个指向FILE类型结构体的指针,该结构体包含有关文件的信息。

mode参数的含义如下:

  • "r":只读打开一个文本文件,文件不存在则打开失败;
  • "w":写打开或新建(如果不存在)一个文本文件,先清空文件再写入数据;
  • "a":以追加方式打开一个文本文件,写入的数据追加在文件尾部;
  • "rb":"r"模式下以二进制方式打开文件;
  • "wb":"w"模式下以二进制方式打开文件;
  • "ab":"a"模式下以二进制方式打开文件。
fread函数和fwrite函数

fread函数和fwrite函数分别用于读取和写入二进制数据。它们的原型如下:

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

其中,ptr是需要读取或写入的数据的指针,size是每个元素的大小,count是要读取或写入的元素数量,stream是文件指针。这两个函数的返回值是实际读取或写入的元素数量。

fseek函数和ftell函数

fseek函数和ftell函数分别用于定位文件的读写位置。它们的原型如下:

int fseek(FILE *stream, long int offset, int origin);
long int ftell(FILE *stream);

其中,stream是要定位的文件指针,offset是偏移量,origin是偏移方式。

偏移方式有三种:

  • SEEK_SET:从文件开头计算偏移;
  • SEEK_CUR:从当前位置计算偏移;
  • SEEK_END:从文件结尾计算偏移。

ftell函数用于获取当前文件读写位置的偏移量。

fclose函数

fclose函数用于关闭文件,它的原型如下:

int fclose(FILE *stream);

其中,stream是要关闭的文件指针。关闭文件后,该指针将不再指向该文件。

示例代码
#include <stdio.h>

int main()
{
    FILE *f1, *f2;
    char c;

    f1 = fopen("input.txt", "r");
    f2 = fopen("output.txt", "w");

    while((c = getc(f1)) != EOF)
    {
        putc(c, f2);
    }

    fclose(f1);
    fclose(f2);

    return 0;
}

这段示例代码将input.txt文件中的内容复制到output.txt文件中。其中,getc和putc是标准I/O库函数,用于读取和写入单个字符,EOF是标准I/O库中的宏,表示文件结束。