c语言文件读写对比,追加写,每次写入4096字节,读出4096字节对比,当文件写到100M时从头开始
时间: 2024-12-18 09:15:25 浏览: 6
在C语言中,文件的读写操作主要有二进制模式(`"rb"`,`"wb"`)和文本模式(`"r"`,`"w"`)。当你想要逐块(如4096字节)追加写入文件并在达到一定大小(比如100MB)时从头开始,你需要使用二进制模式(`"ab"`),因为它不会添加换行符,适合连续的数据流。
**写入操作(追加):**
```c
#include <stdio.h>
#include <fcntl.h> // 对于O_APPEND标志
const int BUFFER_SIZE = 4096;
char data[BUFFER_SIZE];
int main() {
FILE* file = fopen("your_file.txt", "ab");
if (!file) {
perror("Error opening file for writing");
return 1;
}
while (/* 文件大小未达100MB */ && fread(data, sizeof(char), BUFFER_SIZE, stdin) > 0) { // 或者有数据可读
int written = fwrite(data, sizeof(char), fread(data, sizeof(char), BUFFER_SIZE, stdin), file);
if (written != BUFFER_SIZE) {
perror("Error writing to file");
break;
}
seekp(file, 0, SEEK_END); // 当写入完成后移动指针至文件末尾
if (ftello(file) >= 104857600) { // 100MB
rewind(file); // 从头开始写
}
}
fclose(file);
return 0;
}
```
这里我们假设`data`是从标准输入(stdin)获取的数据。
**读取操作:**
```c
#include <stdio.h>
int main() {
FILE* file = fopen("your_file.txt", "rb"); // "rb"模式用于读取
char read_buffer[BUFFER_SIZE];
size_t remaining_bytes = 0;
while ((remaining_bytes = fread(read_buffer, sizeof(char), BUFFER_SIZE, file)) > 0) {
/* 处理读取的数据 */
printf("%.*s\n", (int)remaining_bytes, read_buffer);
// 可选:当读取到100MB时停止
if (ftello(file) >= 104857600) {
break;
}
}
if (ferror(file)) {
perror("Error reading from file");
} else {
fclose(file);
}
return 0;
}
```
这里读取的是整个文件,直到结束或达到100MB为止。
阅读全文