Это мой первый подход с fread()
и fwrite()
функции. Поэтому я изучаю, как с ними бороться. Для текстовых файлов мне удалось прочитать a, а затем создать файл в другой функции. Но, всякий раз, когда я пытаюсь использовать нетекстовые файлы, они просто выводят повреждение. Я спрашиваю здесь, потому что у меня не было достаточных результатов для поиска этого вопроса по интернету.Как правильно fread() и fwrite() не текстовый файл?
Вкратце: я отправляю данные из файла, который я открыл на сервере для клиента, а затем клиент пытается создать точный файл с обработанными данными.
Итак, позвольте мне объяснить, как я это делаю: открыть неофициальный текстовый файл в двоичном режиме:
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
в новом созданном файле с той же функцией, что и для неподписанного символа.
Итак, что не так с этим кодом и почему он не выводит идеальный файл? Использую ли я fread()
и fwrite()
ошибочно?
Что означает «они просто выводят повреждение»? – immibis
Почему вы используете функции 'stdio' в C++-программе вместо классов C++? – Barmar
@immibis файлы не выполняются так, как должны. Он не имеет размер он должен. Думаю, что да. – Xabirau