1、使用fgetc()逐字符读取
fgetc()
是 C 标准库中的一个函数,用于从文件流中读取一个字符。它是 stdio.h
头文件中定义的一部分,广泛用于文件处理和输入操作。
#include <stdio.h> int main() { FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("Error opening file"); return 1; } char ch; while ((ch = fgetc(file)) != EOF) { putchar(ch); } fclose(file); return 0; }
2、使用fgets()逐行读取
fgets()
是一个C语言标准库函数,用于从输入流(如文件或网络连接)中读取字符串。从流stream
中读取最多n-1
个字符到一个字符串s
中,并在末尾添加一个NULL
字符作为字符串的结束标志。如果读取成功,函数将返回指向字符串的指针;如果遇到文件结束或出错,则返回NULL
。
#include <stdio.h> int main() { FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("Error opening file"); return 1; } char line[256]; while (fgets(line, sizeof(line), file)) { printf("%s", line); } fclose(file); return 0; }
3、使用fread()块读取
fread()
是一个 C 语言中的函数,它可以从文件流中读取数据。fread()
函数是 C 语言中用于从文件流中读取数据的重要函数。通过合理的使用这个函数,可以轻松实现对文件中数据的读取和处理。在使用过程中,需要注意正确设置参数,并且在读取数据后及时关闭文件流,以避免资源浪费。
#include <stdio.h> #include <stdlib.h> int main() { FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("Error opening file"); return 1; } fseek(file, 0, SEEK_END); long fileSize = ftell(file); rewind(file); char *buffer = (char *)malloc(fileSize + 1); fread(buffer, 1, fileSize, file); buffer[fileSize] = '\0'; printf("%s", buffer); free(buffer); fclose(file); return 0; }
4、使用fscanf()格式化读取
fscanf()
是 C 标准库中的一个函数,用于从文件中读取格式化输入。它是 scanf()
的文件版本,允许从指定的文件流中读取数据并根据提供的格式字符串进行解析。
#include <stdio.h> int main() { FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("Error opening file"); return 1; } char word[256]; while (fscanf(file, "%s", word) != EOF) { printf("%s\n", word); } fclose(file); return 0; }
5、使用低级I/O函数read()逐块读取
C语言中,标准库提供了多种I/O函数,如fread()
和fgets()
,它们操作方便,但有时我们需要更底层的控制,比如逐块读取文件内容。这时,可以使用UNIX/Linux系统调用中的read()
函数。read()
函数是一个低级I/O函数,它直接与操作系统交互,提供了对文件描述符的直接访问。
#include <fcntl.h> #include <unistd.h> #include <stdio.h> int main() { int fd = open("example.txt", O_RDONLY); if (fd == -1) { perror("Error opening file"); return 1; } char buffer[256]; ssize_t bytesRead; while ((bytesRead = read(fd, buffer, sizeof(buffer) - 1)) > 0) { buffer[bytesRead] = '\0'; printf("%s", buffer); } close(fd); return 0; }