系列目录
文件操作是编程中的一项重要技能,它允许程序与外部文件进行交互。通过文件操作,我们可以读取数据文件、写入结果文件,并对文件进行各种操作。本节将介绍如何在C语言中打开和关闭文件、读写文件以及文件指针和缓冲的使用。
打开与关闭文件
在C语言中,文件操作由 ‘FILE‘ 类型的指针进行管理。使用 ‘fopen‘ 函数打开文件,‘fclose‘ 函数关闭文件。
打开文件
‘fopen‘ 函数用于打开文件。它接受两个参数:文件名和模式(如读、写、追加等),并返回一个‘FILE‘指针,例如。
FILE *filePtr;
filePtr = fopen("example.txt", "r");
if (filePtr == NULL) {
printf("Failed to open the file.\n");
return 1;
}
常见的文件打开模式:
- ‘"r"‘:以只读模式打开文件。如果文件不存在,则返回 ‘NULL‘;
- ‘"w"‘:以写入模式打开文件。如果文件不存在,则创建文件;如果文件存在,则清空文件内容;
- ‘"a"‘:以追加模式打开文件。如果文件不存在,则创建文件;
- ‘"r+"‘:以读写模式打开文件。如果文件不存在,则返回 ‘NULL‘;
- ‘"w+"‘:以读写模式打开文件。如果文件不存在,则创建文件;如果文件存在,则清空文件内容;
- ‘"a+"‘:以读写模式打开文件。如果文件不存在,则创建文件。
关闭文件
‘fclose‘ 函数用于关闭文件。它接受一个 ‘FILE‘ 指针作为参数,例如。
if (fclose(filePtr) != 0) {
printf("Failed to close the file.\n");
return 1;
}
读写文件
文件的读写操作可以通过 ‘fscanf‘ 和 ‘fprintf‘(用于格式化输入输出)、‘fgets‘ 和 ‘fputs‘(用于字符串读写)、以及 ‘fread‘ 和 ‘fwrite‘(用于二进制读写)等函数实现。
读文件
使用‘fscanf‘从文件中读取格式化数据,例如:
int number;
fscanf(filePtr, "%d", &number);
printf("Read number: %d\n", number);
使用 ‘fgets‘ 从文件中读取字符串:
char buffer[100];
fgets(buffer, 100, filePtr);
printf("Read string: %s\n", buffer);
写文件
使用 ‘fprintf‘ 向文件写入格式化数据,例如:
fprintf(filePtr, "%d", 42);
使用‘fputs‘向文件写入字符串:
fputs("Hello, world!\n", filePtr);
二进制读写
使用 ‘fread‘ 和 ‘fwrite‘ 进行二进制文件操作,例如:
int data[5] = {1, 2, 3, 4, 5};
fwrite(data, sizeof(int), 5, filePtr);
int readData[5];
fread(readData, sizeof(int), 5, filePtr);
文件指针与缓冲
文件指针和缓冲区用于管理文件读写操作中的位置和效率。
文件指针
文件指针(file pointer)是指向文件当前读写位置的指针。可以使用 ‘fseek‘、‘ftell‘ 和 ‘rewind‘ 函数操作文件指针。
fseek(filePtr, 0, SEEK_END); // 移动到文件末尾
long fileSize = ftell(filePtr); // 获取文件大小
rewind(filePtr); // 重置文件指针到文件开头
‘fseek‘ 的第二个参数指定偏移量,第三个参数指定基准位置(‘SEEK_SET‘、‘SEEK_CUR‘、‘SEEK_END‘)。
文件缓冲
缓冲区用于提高文件操作效率。C语言提供了‘setbuf‘和‘setvbuf‘函数用于控制文件缓冲区,例如:
char buffer[BUFSIZ];
setbuf(filePtr, buffer); // 设置全缓冲
‘setvbuf‘ 函数允许更精细的缓冲区控制,例如:
setvbuf(filePtr, buffer, _IOFBF, BUFSIZ); // 设置全缓冲
setvbuf(filePtr, buffer, _IOLBF, BUFSIZ); // 设置行缓冲
setvbuf(filePtr, buffer, _IONBF, BUFSIZ); // 设置无缓冲
示例代码
以下是一个综合示例,展示了文件的打开与关闭、读写操作以及文件指针和缓冲的使用,例如:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *filePtr;
filePtr = fopen("example.txt", "w+");
if (filePtr == NULL) {
printf("Failed to open the file.\n");
return 1;
}
// 写文件
fprintf(filePtr, "Hello, world!\n");
fputs("This is a test.\n", filePtr);
// 移动文件指针到文件开头
rewind(filePtr);
// 读文件
char buffer[100];
while (fgets(buffer, 100, filePtr) != NULL) {
printf("%s", buffer);
}
// 关闭文件
if (fclose(filePtr) != 0) {
printf("Failed to close the file.\n");
return 1;
}
return 0;
}
总结
通过本节的学习,你已经了解了C语言中的文件操作基本概念,包括如何打开和关闭文件、读写文件、以及文件指针和缓冲的使用。掌握这些技能,可以更有效地处理文件操作,提高程序的数据处理能力。
下一篇:白骑士的C语言教学进阶篇 2.5 C标准库


9552

被折叠的 条评论
为什么被折叠?



