gpt4 book ai didi

使用 fseek、fread 和 fwrite 处理二进制文件

转载 作者:行者123 更新时间:2023-11-30 17:14:11 24 4
gpt4 key购买 nike

我正在尝试编写一个函数来覆盖二进制文件。现在我编写了这个覆盖文本文件的函数,它工作得很好:

void myCopy(char source_file[50], char dest_file[50])
{
FILE *fp1, *fp2;
char a;
fp1 = fopen(source_file, "rt");
if (fp1 == NULL)
{
printf("Can't open this file, either it doesn't exist or doesn't contain anything.\n");
}
fp2 = fopen(dest_file, "wt");
if (fp2 == NULL)
{
printf("Can't open this file, either it doesn't exist or doesn't contain anything.\n");
}
while ((a = fgetc(fp1)) != EOF)//While a failure did not accure.
{
fputc(a, fp2);
}
fclose(fp1);
fclose(fp2);
}

我的问题是,有没有一种方法可以在不使用 fputc、fgetc、fscanf 和 fprintf 的情况下对所有二进制文件执行相同的操作?

最佳答案

如果您从 fopen 选项字符串中删除“t”字符,您的代码对于二进制文件来说将是正确的。但是您可以使用 fread/fwrite 函数和缓冲区来提高复制速度。示例:

const size_t buffer_size = 8192;
char buffer[buffer_size];
while (true) {
size_t read = fread(buffer, sizeof(char), buffer_size, fp1);

if (read > 0)
fwrite(buffer, sizeof(char), buffer_size, fp2);
else
break;
}

关于使用 fseek、fread 和 fwrite 处理二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30456508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com