Некорректная запись в файл
У меня программа передающая файл по сети, эта часть отвечает за принятие пакетов и их запись в новосозданный файл. Проблема в том, что вот этот кучок кода работает так, как и нужно (файл создаётся целый), но мне нужно, чтобы запись происходила уже после прихода всех пакетов (этот код упрощённый, в оригинале есть проверка на получение всех пакетов).
int const buffer_size = 1024;
char buffer[buffer_size];
char filename[buffer_size];
FILE* file;
file = fopen(filename, "wb");
int received_size = 0;
while (true) {
received_size = recvfrom(client_socket, buffer, (buffer_size), 0, (SOCKADDR*)&server, &server_sizeof);
fwrite(buffer, sizeof(char), received_size, file);
TCP_sock->send_ok();
}
Я пробовал такой вариант кода, но по какой-то совершенно непонятной для меня причине, оно не работает и файл создаётся повреждённым.
int const buffer_size = 1024;
char buffer[buffer_size];
char filename[buffer_size];
int received_size = 0;
std::vector<int> size_vec;
std::vector<std::string> string_vec;
while (true) {
received_size = recvfrom(client_socket, buffer, (buffer_size), 0, (SOCKADDR*)&server, &server_sizeof);
size_vec.push_back(received_size);
string_vec.push_back(buffer);
TCP_sock->send_ok();
}
FILE* file;
file = fopen(filename, "wb");
for (int a = 0; a < string_vec.size(); ++a) {
std::string temp_str = string_vec[a];
strcpy(buffer, temp_str.c_str());
fwrite(buffer, sizeof(char), size_vec[a], file);
}
fwrite со string не работает и с использованием (char*)str.c_str() файл записывается некорректно, но при этом следующий кусок кода работает как надо и файл снова создаётся целым.
int const buffer_size = 1024;
char buffer[buffer_size];
char filename[buffer_size];
FILE* file;
file = fopen(filename, "wb");
int received_size = 0;
std::string full_file;
while (true) {
received_size = recvfrom(client_socket, buffer, (buffer_size), 0, (SOCKADDR*)&server, &server_sizeof);
full_file = buffer;
strcpy(buffer, full_file.c_str());
fwrite(buffer, sizeof(char), received_size, file);
TCP_sock->send_ok();
}
При использовании ofstream вообще не работает.
Кто-нибудь подскажет, как поправить код так, чтобы файл создавался целым и уже после приёма всех пакетов?