这是我第一次使用fread()
和fwrite()
功能。所以我正在学习如何处理它们。对于文本文件,我已经成功地设法读取a然后在另一个函数中创建一个文件。但是,每当我尝试使用非文本文件时,它们只会输出损坏。我在这里问,因为我没有通过互联网搜索此事的成功结果。
简而言之:我将数据收集从我在服务器上打开的文件发送到客户端,然后客户端尝试使用解析的数据创建确切的文件。
那么,让我解释一下我是怎么做到的: 我以二进制模式打开一个非文本文件:
FILE* myfile = fopen(fullPath.c_str(), "rb");
然后我创建一个循环来读取文件:(由于某种原因,我发现非文本文件的实际大小等于size/4
)
int readPos = 0;
std::string externalBuffer;
while (true) {
unsigned char buffer[1024];
int bytesRead = 0;
bytesRead += fread(buffer, sizeof(unsigned char), 1024, upfile);
if (bytesRead == 0)
break;
externalBuffer = unsigned_char_to_string(buffer, bytesRead); //This simple function loops over the buff and converts each entry to the string -> the results are numbers from 0-255
//Here I convert the buffer to a string and send it to the client to be parsed and add to a string buffer like: dataChunk += parsedString;
//clear buffers
}
现在我在客户端解析字符串sucessfuly(我不确定腐败问题是否在于我将缓冲区转换为字符串)。 在发送循环的所有数据之后。客户端尝试使用缓冲区dataChunk:
写入FILE* myfile = fopen(fullPath.c_str(), "wb+");
fwrite(dataChunk.c_str(), sizeof(char), dataChunk.size(), myfile);
fclose(myfile);
我已经尝试将发送的数据转换为十六进制字符串,将每个条目从0到255转换为十六进制并写入新文件。我还尝试将dataChunk
字符串转换为unsigned char
数组。但我所有的尝试导致文件损坏。我使用此方法尝试创建可执行文件和png图像。
我还看到了一些示例然后fopen
并一次复制所有文件,然后fwrite
在同一函数的新创建文件中使用看起来对它们起作用的unsigned char。
那么,这段代码出了什么问题?为什么它没有输出完美的文件?我错误地使用了fread()
和fwrite()
吗?
答案 0 :(得分:0)
使用@Barmar更正。 我将unsigned_char_to_string函数更改为此代码:
std::string externalBuffer(&buffer[0], &buffer[0] + bytesRead);
它完美无缺!
谢谢@Barmar!对不起,这是一个noobish :)你结识了我的一天!