Administrator
Administrator
发布于 2024-10-14 / 14 阅读
0
0

C语言基础文件操作

下面详细讲解 C 语言标准库中的一些文件操作函数,包括 fopenfclosefreadfwritefseekftellfprintffscanf,这些函数提供了基本的文件读写功能和文件位置操作功能。

1. fopen

  • 功能fopen() 用于打开一个文件,并返回一个指向 FILE 结构的指针。它可以指定打开的模式(如读、写、追加等)。
  • 原型
    FILE *fopen(const char *filename, const char *mode);
    
  • 参数
    • filename:文件名的字符串。
    • mode:打开文件的模式,如下:
      • "r":只读模式。文件必须存在。
      • "w":只写模式。文件不存在时会创建,存在时会清空。
      • "a":追加模式。文件不存在时会创建,存在时在文件末尾写入数据。
      • "r+":读写模式,文件必须存在。
      • "w+":读写模式,文件不存在时创建,存在时清空。
      • "a+":读写模式,文件不存在时创建,存在时从末尾开始写入。
  • 返回值:返回文件指针,失败返回 NULL

示例

FILE *fp = fopen("example.txt", "r");
if (fp == NULL) {
    perror("文件打开失败");
}

2. fclose

  • 功能fclose() 用于关闭一个已打开的文件,并释放与文件相关的系统资源。
  • 原型
    int fclose(FILE *stream);
    
  • 参数
    • stream:指向需要关闭的文件指针。
  • 返回值:成功时返回 0,失败时返回 EOF。

示例

fclose(fp);

3. fread

  • 功能fread() 从文件中读取数据到内存缓冲区中,读取的内容按块读取。
  • 原型
    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
    
  • 参数
    • ptr:指向存储读取数据的缓冲区。
    • size:每个元素的大小(通常是 sizeof(type))。
    • nmemb:要读取的元素数量。
    • stream:文件指针。
  • 返回值:返回成功读取的元素数量。

示例

char buffer[256];
size_t bytesRead = fread(buffer, sizeof(char), 255, fp);
buffer[bytesRead] = '\0';  // 确保字符串以空字符结尾

4. fwrite

  • 功能fwrite() 将数据从内存缓冲区写入文件,以块的方式写入。
  • 原型
    size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
    
  • 参数
    • ptr:指向要写入的数据缓冲区。
    • size:每个元素的大小。
    • nmemb:要写入的元素数量。
    • stream:文件指针。
  • 返回值:返回成功写入的元素数量。

示例

const char *text = "Hello, World!";
fwrite(text, sizeof(char), strlen(text), fp);

5. fseek

  • 功能fseek() 用于移动文件指针到文件的指定位置,常用于随机访问文件。
  • 原型
    int fseek(FILE *stream, long offset, int whence);
    
  • 参数
    • stream:文件指针。
    • offset:相对于 whence 的偏移量(以字节为单位)。
    • whence:决定偏移量相对于哪个位置:
      • SEEK_SET:文件开头。
      • SEEK_CUR:当前文件指针位置。
      • SEEK_END:文件末尾。
  • 返回值:成功返回 0,失败返回非 0 值。

示例

fseek(fp, 0, SEEK_END);  // 将文件指针移动到文件末尾

6. ftell

  • 功能ftell() 返回当前文件指针的位置(以字节为单位),即从文件开头到当前位置的偏移量。
  • 原型
    long ftell(FILE *stream);
    
  • 参数
    • stream:文件指针。
  • 返回值:返回当前文件指针位置(从文件开始的偏移量),失败返回 -1。

示例

long position = ftell(fp);  // 获取当前文件指针位置

7. fprintf

  • 功能fprintf() 用于将格式化的输出写入到文件中,类似于 printf(),只是输出目标是文件而非控制台。
  • 原型
    int fprintf(FILE *stream, const char *format, ...);
    
  • 参数
    • stream:文件指针。
    • format:格式化字符串,类似于 printf() 的格式。
    • ...:可变参数,用于格式化输出的内容。
  • 返回值:返回写入的字符数,失败时返回负值。

示例

fprintf(fp, "Name: %s, Age: %d\n", "Alice", 30);

8. fscanf

  • 功能fscanf() 用于从文件中读取格式化输入,类似于 scanf(),但从文件读取而非标准输入。
  • 原型
    int fscanf(FILE *stream, const char *format, ...);
    
  • 参数
    • stream:文件指针。
    • format:格式化字符串,类似于 scanf() 的格式。
    • ...:指向变量的指针,用于存储读取到的内容。
  • 返回值:返回成功读取的项数,遇到错误或到达文件末尾时返回 EOF

示例

char name[50];
int age;
fscanf(fp, "%s %d", name, &age);
printf("Name: %s, Age: %d\n", name, age);

总结:

  • 文件操作

    • fopen():打开文件。
    • fclose():关闭文件。
    • fread():从文件中读取数据。
    • fwrite():向文件中写入数据。
  • 文件指针操作

    • fseek():移动文件指针。
    • ftell():获取当前文件指针位置。
  • 格式化输入输出

    • fprintf():向文件写入格式化数据。
    • fscanf():从文件读取格式化数据。

这些函数一起使用,可以实现多种文件操作,如顺序读写、随机访问和格式化数据处理。


评论