C语言提供了丰富的文件操作功能,用于读写文件。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 函数声明
void writeToFile(const char *filename);
void readFromFile(const char *filename);
void appendToFile(const char *filename);
void copyFile(const char *source, const char *destination);
void filePositioning(const char *filename);
void binaryFileOperations(const char *filename);
void fileErrorHandling(const char *filename);
void fileBuffering(const char *filename);
int main() {
const char *filename = "example.txt";
const char *binaryFile = "data.bin";
const char *copyFile = "copy.txt";
// 写入文件
printf("写入文件示例:\n");
writeToFile(filename);
// 读取文件
printf("\n读取文件示例:\n");
readFromFile(filename);
// 追加文件
printf("\n追加文件示例:\n");
appendToFile(filename);
readFromFile(filename);
// 复制文件
printf("\n复制文件示例:\n");
copyFile(filename, copyFile);
printf("复制后的文件内容:\n");
readFromFile(copyFile);
// 文件定位
printf("\n文件定位示例:\n");
filePositioning(filename);
// 二进制文件操作
printf("\n二进制文件操作示例:\n");
binaryFileOperations(binaryFile);
// 文件错误处理
printf("\n文件错误处理示例:\n");
fileErrorHandling("nonexistent.txt");
// 文件缓冲
printf("\n文件缓冲示例:\n");
fileBuffering(filename);
return 0;
}
// 写入文件
void writeToFile(const char *filename) {
FILE *file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件:%s\n", filename);
return;
}
fprintf(file, "这是第一行\n");
fprintf(file, "这是第二行\n");
fprintf(file, "这是第三行\n");
fclose(file);
printf("文件写入成功\n");
}
// 读取文件
void readFromFile(const char *filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件:%s\n", filename);
return;
}
char line[256];
while (fgets(line, sizeof(line), file) != NULL) {
printf("%s", line);
}
fclose(file);
}
// 追加文件
void appendToFile(const char *filename) {
FILE *file = fopen(filename, "a");
if (file == NULL) {
printf("无法打开文件:%s\n", filename);
return;
}
fprintf(file, "这是追加的内容\n");
fclose(file);
printf("文件追加成功\n");
}
// 复制文件
void copyFile(const char *source, const char *destination) {
FILE *src = fopen(source, "r");
if (src == NULL) {
printf("无法打开源文件:%s\n", source);
return;
}
FILE *dst = fopen(destination, "w");
if (dst == NULL) {
printf("无法创建目标文件:%s\n", destination);
fclose(src);
return;
}
char buffer[1024];
size_t bytes;
while ((bytes = fread(buffer, 1, sizeof(buffer), src)) > 0) {
fwrite(buffer, 1, bytes, dst);
}
fclose(src);
fclose(dst);
printf("文件复制成功\n");
}
// 文件定位
void filePositioning(const char *filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件:%s\n", filename);
return;
}
// 获取文件大小
fseek(file, 0, SEEK_END);
long size = ftell(file);
printf("文件大小:%ld 字节\n", size);
// 回到文件开始
fseek(file, 0, SEEK_SET);
// 读取第一行
char line[256];
if (fgets(line, sizeof(line), file) != NULL) {
printf("第一行:%s", line);
}
// 移动到文件中间
fseek(file, size / 2, SEEK_SET);
if (fgets(line, sizeof(line), file) != NULL) {
printf("中间行:%s", line);
}
fclose(file);
}
// 二进制文件操作
void binaryFileOperations(const char *filename) {
// 写入二进制数据
FILE *file = fopen(filename, "wb");
if (file == NULL) {
printf("无法创建二进制文件:%s\n", filename);
return;
}
int numbers[] = {1, 2, 3, 4, 5};
fwrite(numbers, sizeof(int), 5, file);
fclose(file);
// 读取二进制数据
file = fopen(filename, "rb");
if (file == NULL) {
printf("无法打开二进制文件:%s\n", filename);
return;
}
int readNumbers[5];
fread(readNumbers, sizeof(int), 5, file);
printf("读取的二进制数据:");
for (int i = 0; i < 5; i++) {
printf("%d ", readNumbers[i]);
}
printf("\n");
fclose(file);
}
// 文件错误处理
void fileErrorHandling(const char *filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("文件打开错误");
return;
}
// 检查文件是否为空
fseek(file, 0, SEEK_END);
if (ftell(file) == 0) {
printf("文件为空\n");
}
// 检查文件权限
if (fclose(file) == EOF) {
perror("文件关闭错误");
}
}
// 文件缓冲
void fileBuffering(const char *filename) {
FILE *file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件:%s\n", filename);
return;
}
// 设置行缓冲
setvbuf(file, NULL, _IOLBF, 0);
fprintf(file, "这是行缓冲的内容\n");
fprintf(file, "这是另一行内容\n");
// 强制刷新缓冲区
fflush(file);
fclose(file);
printf("文件缓冲操作完成\n");
}