前言:
现时各位老铁们对“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语言文件视频讲解