gpt4 book ai didi

c++ - 在 C++ 中复制文件的一部分

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:24 25 4
gpt4 key购买 nike

我目前正忙于一个项目,在该项目中我必须将一个文件的一部分复制到另一个文件,因此我使用 fread 和 fwrite 编写了一个代码。但是我遇到了一个问题:出于测试目的,我编写了一个应该复制整个文件的代码,但是代码以某种方式创建了比原始文件大的拷贝。请参阅下面我制作的代码

             FILE *base_file;
FILE *new_file;
fpos_t curpos;
int tmp;

// Open the base file
fopen_s(&base_file, "C:/base.dat", "rb");
// Open the file which should contain the copy
fopen_s(&new_file, "C:/new.dat", "w");

// Get the filesize
fseek(base_file, 0, SEEK_END);
fgetpos(base_file, &curpos);
fseek(base_file, 0, SEEK_SET);

//Read and copy (it seems to go wrong here)
for(int i = 0; i < curpos; i++){
fread (&tmp, 1, 1, base_file);
fwrite(&tmp, 1, 1, new_file);
}

fclose(base_file);
fclose(new_file);

基础文件为 525 kb,新文件为 527 kb。据我所知,出现此问题的部分是在有 7 个空字节的部分之后,并且拷贝以某种方式在这些部分之后添加了“0D”(十六进制)。在 ascii 中,“0D”字符是“回车”。我想知道我的复制代码将回车符添加到文件中的原因可能是什么?据我所知,这个脚本应该像我刚刚读取基本文件一样工作,并直接将其复制到新文件,而基本文件不包含这些回车符。

最佳答案

您正在以文本模式而不是二进制模式打开目标文件,因此换行符转换发生在您的背后。将模式更改为 "wb"

其他说明:

  1. 使用流而不是 stdio。
  2. 不要逐字节写。使用更大的缓冲区,您的方法将永远占用更大的文件。

关于c++ - 在 C++ 中复制文件的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619770/

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