
花开花落为您分享以下优质知识
二进制文件复制在C语言中可通过以下两种高效方法实现:
一、逐字节复制(适用于小文件)
通过`fread`和`fwrite`逐字节读写文件,确保二进制数据完整传输。此方法简单但效率较低,适合小文件操作。
```c
include
int copyFile(const char *src, const char *dest) {
FILE *srcFile = fopen(src, "rb");
FILE *destFile = fopen(dest, "wb");
if (!srcFile || !destFile) {
return -1;
}
char buffer;
size_t bytesRead;
while ((bytesRead = fread(buffer, 1, sizeof(buffer), srcFile)) >
0) {
fwrite(buffer, 1, bytesRead, destFile);
}
fclose(srcFile);
fclose(destFile);
return 0;
}
```
二、内存映射复制(适用于大文件)
通过`stat`获取文件大小,动态分配内存后一次性复制,实现“空间换时间”优化。此方法效率更高,但需注意文件大小限制(通常建议1GB以内)。
```c
include
include
include
include
include
int copyFile(const char *src, const char *dest) {
struct stat st;
if (stat(src, &st) != 0) {
return -1;
}
char *buffer = malloc(st.st_size);
if (!buffer) {
return -1;
}
if (fread(buffer, 1, st.st_size, src) != st.st_size) {
free(buffer);
return -1;
}
if (fwrite(buffer, 1, st.st_size, dest) != st.st_size) {
free(buffer);
return -1;
}
free(buffer);
return 0;
}
```
选择建议
小文件:优先使用逐字节复制,代码更简洁。
大文件:推荐内存映射复制,提升效率。
注意事项
复制前需检查目标文件是否可写。
复制后建议关闭文件指针。
处理大文件时注意内存分配失败的情况。