龙空技术网

大话C语言:文件操作

职创未来武汉中心 76

前言:

现时各位老铁们对“c语言文件视频讲解”大概比较注意,咱们都想要学习一些“c语言文件视频讲解”的相关知识。那么小编也在网络上汇集了一些关于“c语言文件视频讲解””的相关内容,希望小伙伴们能喜欢,小伙伴们快快来学习一下吧!

文件操作需要经过以下几个步骤:

文件打开:C语言中,使用fopen函数来打开文件。该函数接受两个参数:文件路径和打开模式(如"r"表示只读,"w"表示写入,"a"表示追加等)。如果文件打开成功,fopen返回一个非空的文件指针;否则返回NULL。文件读写:C语言提供了多种函数用于文件的读写操作,如fgetc、fgets用于从文件中读取字符或字符串,fputc、fputs用于向文件中写入字符或字符串。此外,还有fread和fwrite函数用于读写二进制数据。文件定位:C语言中的fseek函数用于移动文件位置指针到指定位置,从而实现对文件的定位。通过定位,程序可以从文件的任意位置开始读写数据。文件关闭:使用完文件后,应该使用fclose函数关闭文件。关闭文件可以释放系统资源,确保数据的完整性。

文件操作

1 文件打开

fopen是C语言标准库中的一个函数,用于打开文件,并返回一个指向该文件的指针,这个指针被称为文件指针。语法格式:

FILE *fopen(const char *filename, const char *mode);功能:打开一个已经存在的文件,并返回这个文件的文件指针(文件的标识)或者创建一个文件,并打开此文件,然后返回文件的标识。参数:    filename:要打开的文件名(可以包含路径)。	mode:打开文件的方式,也就是文件访问模式。返回值:    成功时,返回一个非空的FILE指针    失败时,返回NULL其中,mode参数指定了文件应如何打开,它可以是以下值之一或它们的组合:    "r":以只读方式打开文件。文件必须存在。    "w":以写入方式打开文件。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。    "a":以追加方式打开文件。如果文件存在,写入的数据会被加到文件尾;如果文件不存在,则创建新文件。    "r+":以读写方式打开文件。文件必须存在。    "w+":以读写方式打开文件。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。    "a+":以读写方式打开文件。如果文件存在,写入的数据会被加到文件尾;如果文件不存在,则创建新文件。此外,为了支持二进制文件的打开,还可以在上述模式字符串中添加一个b字符,例如"rb"表示以二进制方式只读打开文件

文件打开

2 文件关闭

fclose是用于关闭一个先前由fopen或类似函数打开的文件。语法格式:

int fclose(FILE *fp);功能:关闭fp所代表的文件参数:    fp:这是一个指向FILE类型结构的指针,指向要关闭的目标文件。这个指针通常是由fopen函数返回的。返回值:    如果文件成功关闭,fclose函数返回0。	如果关闭文件失败,fclose函数返回EOF(通常是-1)。如果传递给fclose的指针是NULL,并且程序可以继续执行,fclose将设定错误码为EINVAL,并返回EOF

代码示例:

#include <stdio.h>int main(){    // 打开文件    FILE *fp = fopen("example.txt", "r");      if (fp == NULL)     {          printf("打开文件失败");                 return 1;      }      // 关闭文件    if (fclose(fp) != 0)     {          printf("关闭文件失败\n");                return 1;      }    else    {        printf("关闭文件成功\n");    }        return 0;}

注意,使用fclose时,应当总是检查其返回值以确保文件已经正确关闭。未正确关闭文件可能导致数据丢失或资源泄漏。在调用fclose之前,通常建议先清空文件缓冲区,以确保所有数据都被写入文件。

文件关闭

3 文件读取3.1 读取一个字符

fgetc 是 C 语言标准库中的一个函数,用于从指定的文件流中读取一个字符。语法格式:

int fgetc(FILE *stream);功能:从指定的文件流中读取一个字符。参数:    FILE *stream:这是一个指向 FILE 对象的指针,它表示要从中读取字符的文件流。返回值:    如果读取成功,fgetc 返回读取到的字符。    如果在读取字符时遇到文件结尾(EOF),或者发生错误,fgetc 将返回 EOF。

在使用 fgetc 时,通常需要检查返回值是否为 EOF,以确定是否已到达文件末尾或发生了错误。可以使用 feof(stream) 函数来检查是否到达文件末尾,使用 ferror(stream) 函数来检查是否发生错误。

代码示例:

#include <stdio.h>    int main(){  	// 打开文件    FILE *file = fopen("example.txt", "r");      if (file == NULL)     {          printf("文件打开失败\n");                return 1;      }        int character;      // 循环读取文件中字符,直到文件结尾    while ((character = fgetc(file)) != EOF)    {          // 检查是否为 EOF 之外的错误          if (ferror(file))         {              printf("文件读取出错\n");              break;          }          // 否则,输出读取到的字符          putchar(character);      }        if (feof(file))    {          printf("\n文件读取结束!\n");      }        fclose(file);      return 0;  }
3.2 读取一个字符串

fgets 是 C 语言中的一个标准库函数,用于从指定的文件流中读取一行数据,直到遇到换行符('\n')、文件结束符(EOF)或读取了指定数量的字符为止(不包括末尾的换行符)。语法格式:

char *fgets(char *str, int n, FILE *stream);功能:从指定的文件流中读取一行数据,直到遇到换行符('\n')、文件结束符(EOF)或读取了指定数量的字符为止(不包括末尾的换行符)。参数:    str:这是一个指向字符数组的指针,用于存储从文件中读取的字符串。这个数组必须足够大,以容纳要读取的字符串,包括一个额外的空字符('\0')作为字符串的结束标志。	n:这是一个整数,指定了最多读取的字符数(包括结尾的空字符)。通常,这个值会设置为字符数组的大小。	stream:这是一个指向 FILE 对象的指针,它表示要从中读取字符串的文件流。这个 FILE 对象通常是通过 fopen 函数打开的。返回值:    如果成功读取一行,fgets 返回指向 str 的指针。	如果在读取任何字符之前就遇到文件结束符或发生错误,fgets 返回 NULL。

代码示例:

#include <stdio.h>    int main() {      // 打开文件    FILE *file = fopen("example.txt", "r");      if (file == NULL) {          perror("文件打开失败\n");                return 1;      }        char line[100] = {0};	// 循环读取每一行数据      while (fgets(line, sizeof(line), file))     {          // 处理读取到的行数据          printf("%s", line);      }        // 判断是否读取至文件尾部    if (feof(file))     {          printf("\n文件读取结束!\n");      }     else if (ferror(file))     {          perror("文件读取错误\n");      }        fclose(file);      return 0;  }

注意,

fgets 会将读取的字符串(包括末尾的空字符)存储在 str 指向的数组中。如果读取的字符串中包含换行符,它也会被存储在数组中。fgets 会在读取到换行符、EOF 或读取了 n-1 个字符后停止(留一个位置给空字符)。这意味着如果一行中的字符数超过了 n-1,fgets 只会读取部分行。如果需要连续读取多行数据,并且每行数据的长度可能超过 n-1,你需要在一个循环中多次调用 fgets,每次处理完一行数据后再读取下一行。3.3 读取指定大小数据

fread是C语言标准库中的一个函数,用于从文件中读取数据。它可以将指定数量的数据项从文件中读取到内存中。语法格式:

size_t fread(void *ptr, size_t size, size_t count, FILE *fp);功能:从fp所标识的文件中读取数据,每块是size个字节,共count块,存放到ptr指向的内存里。参数:	ptr:指向要读取数据的缓冲区的指针,即数据保存的地址。	size:每个数据项的字节数。	count:要读取的数据项数目。	fp:指向文件流的指针,即要读取的文件的标识符。返回值:	fread函数返回成功读取的数据项个数。如果发生错误或在读取任何数据项之前就已经到达文件末尾,返回值可能小于count

代码示例:

 #include <stdio.h>    int main() {      // 打开文件    FILE *fp = fopen("example.txt", "r");    if (fp == NULL)     {          printf("文件打开失败\n");          return 1;      }        char buffer[100]; // 读取数据的缓冲区      // 读取数据    size_t itemsRead = fread(buffer, sizeof(char), sizeof(buffer), fp);       if (itemsRead == 0)     {          // 判断是否读到文件结尾        if (feof(fp))         {              printf("已经读到文件尾部\n");          }         else         {              printf("文件读取出错\n");          }          fclose(fp);          return 1;      }       fclose(fp); // 关闭文件      return 0;  }

注意,

fread函数主要用于读取二进制文件,但也可以用于读取文本文件。在读取文本文件时,需要确保正确处理换行符等文本特定的字符。使用fread时,应当检查返回值以确保正确读取了期望数量的数据项。如果返回值小于count,可能表示文件末尾已经到达,或者发生了其他错误。

4 文件写入

fwrite是C语言标准库中的一个文件操作函数,主要用于将数据写入到文件中。其详细定义如下:

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *fp);功能:将ptr指向的内存里的数据,向fp所标识的文件中写入数据,每块是size个字节,共count块。参数:    ptr:这是一个指向要写入文件的数据的指针。	size:每个数据元素的大小(以字节为单位)。	count:要写入的数据元素的数量。	fp:这是一个指向FILE结构的指针,即目标文件的标识符。返回值:    fwrite函数返回成功写入文件的数据项个数。如果发生错误或在写入任何数据项之前就已经到达文件末尾,返回值可能小于count。

代码示例:

#include <stdio.h>    int main() {      FILE *fp;      int data[] = {1, 2, 3, 4, 5};      size_t elements = sizeof(data) / sizeof(data[0]);        // 打开文件以进行二进制写入      fp = fopen("example.txt", "w+");      if (fp == NULL) {          printf("文件打开失败\n");          return 1;      }        // 将整数数组写入文件      size_t itemsWritten = fwrite(data, sizeof(int), elements, fp);      if (itemsWritten != elements)     {          printf("文件写入失败\n");          fclose(fp);          return 1;      }      // 关闭文件      fclose(fp);        return 0;  }

文件写入

5 文件定位

fseek是C语言标准库中的一个函数,用于设置文件指针的位置。语法格式:

int fseek(FILE *stream, long offset, int whence);功能:移动文件流的读写位置参数:    stream:这是一个指向要操作的文件的指针,通常是由fopen函数返回的。	offset:偏移量,表示以字节为单位的偏移量。正数表示向后移动,负数表示向前移动。	whence:起始点,指定从哪个位置开始计算偏移量。它可以是以下三个常量之一:    	SEEK_SET:文件开头。偏移量是从文件起始位置开始计算的。		SEEK_CUR:文件当前位置。偏移量是从文件当前位置开始计算的。		SEEK_END:文件末尾。偏移量是从文件末尾开始计算的。返回值:    0 执行成功    非0 执行失败

代码示例:

#include <stdio.h>    int main() {      // 打开文件      FILE *file = fopen("example.txt", "r");    if (file == NULL)    {          printf("文件打开失败\n");          return 1;      }        // 假设我们要将文件指针移动到距离文件开始处10个字节的位置      long offset = 10;      if (fseek(file, offset, SEEK_SET) != 0)     {          printf("文件定位失败\n");          fclose(file);                return 1;      }        // 从当前位置开始读取内容      char buffer[100] = {0};      if (fgets(buffer, sizeof(buffer), file) != NULL)    {          printf("文件偏移及后续内容分别是%ld:\n%s", offset, buffer);      }     else     {          printf("没有读取到当前位置后续内容.\n");      }        // 关闭文件      fclose(file);        return 0;  }

注意,在调用fseek之前,必须确保已经使用fopen打开了文件,并且传入了正确的文件指针。此外,fseek仅改变文件指针的位置,并不实际读取或写入任何数据。

文件定位

6 文件重头定位

rewind是C语言标准库中的一个函数,用于将文件内部的位置指针重新指向一个流(数据流/文件)的开头置。语法格式:

void rewind(FILE *stream)功能:用于将文件内部的位置指针重新指向一个流(数据流/文件)的开头。参数:    stream:这是一个指向要操作的文件的指针,通常是由fopen函数返回的。返回值:    无

代码示例:

#include <stdio.h>    int main() {    // 打开文件      FILE *file = fopen("example.txt", "r");      if (file == NULL)     {          printf("文件打开失败\n");          return 1;      }        // 第一次读取文件内容      printf("第一次读:\n");      char buffer[100] = {0};    while (fgets(buffer, sizeof(buffer), file))     {          printf("%s", buffer);      }        // 使用rewind将文件指针重置到文件开头      rewind(file);        // 第二次读取文件内容      printf("\n第二次读:\n");    while (fgets(buffer, sizeof(buffer), file))     {          printf("%s", buffer);      }        // 关闭文件      fclose(file);      return 0;  }

7 获取文件当前读写位置

ftell函数是C语言中的一个标准库函数,它的主要功能是返回当前文件指针的位置,即文件位置指针当前位置相对于文件首的偏移字节数。语法格式:

long ftell(FILE *stream)功能:返回当前文件指针的位置参数:    stream:这是一个指向要操作的文件的指针,通常是由fopen函数返回的。返回值:    返回当前读写位置(距离文件起始的字节数),出错时返回-1。

代码示例:

#include <stdio.h>    int main() {      // 打开文件      FILE *file = fopen("example.txt", "r");      if (file == NULL)    {          printf("文件打开失败\n");                  return 1;      }        // 读取一些内容      char buffer[100] = {0};      if (fgets(buffer, sizeof(buffer), file))    {          printf("读取一行,内容: %s", buffer);      }     else     {          printf("文件读取错误\n");          fclose(file);                  return 1;      }        // 使用ftell获取当前文件指针的位置      long pos = ftell(file);      printf("文件当前位置值: %ld bytes\n", pos);        // 关闭文件      fclose(file);        return 0;  }

---E N D---

喜欢的记得关注哦!

您的支持是我们前进的动力!

职创未来|专注IT与新能源领域中高端人才培养

点赞关注一下

标签: #c语言文件视频讲解