c ++ читает кусок из ifstream и пишет в ofstream - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу прочитать кусок байтов из одного ifstream, а затем записать в другой ofstream.

вот мой код:

size_t chunk_size = ...;
std::ifstream ifs(in_file_name);
std::ofstream ofs(out_file_name);

char * buffer = new char[chunk_size];
ifs.read(buffer, chunk_size);
ofs << buffer;
delete[] buffer;

это правильный способсделать это?

Согласно документу CPP, std::ostream::operator<< принимает streambuffer * в качестве аргумента.Я не уверен, что массив символов можно рассматривать как буферный поток.

(я могу скомпилировать и запустить код, но в моей программе есть какая-то проблема, я не уверен, что это вызвано этим, все еще пытаюсь выяснить это ...)

1 Ответ

0 голосов
/ 11 декабря 2018

это правильный способ сделать это?

Не совсем так.Если вы используете std::istream::read(), то, скорее всего, вам следует связать его с std::ostream::write(), и лучше использовать std::vector<char> для управления памятью (или, по крайней мере, умным указателем):

size_t chunk_size = ...;
std::ifstream ifs(in_file_name);
std::ofstream ofs(out_file_name);

{ // you can use block to limit lifetime of the vector
    std::vector<char> buffer( chunk_size );
    ifs.read( buffer.data(), buffer.size() );
    ofs.write( buffer.data(), buffer.size() ); 
} 

проблема с вашим кодом std::ostream::operator<< перегрузка для const char * ожидает строку с нулевым символом в конце, а не двоичные данные фиксированного размера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...