Здравствуйте, const_volatile, Вы писали:
_>Здравствуйте, Centaur, Вы писали:
C>>Для копирования файлов надо использовать boost::filesystem::copy_file. Или std::istreambuf_iterator.
_>а ещё можно воспользоваться операторами >> или <<, которые принимают в качестве аргумента streambuf. и тогда код будет выглядеть так:
_>
ifs >> ofs.rdbuf();
_>// или
_>ofs << ifs.rdbuf();
и не нужно помнить про skipws и прочее форматирование.
Ок. Всё это хорошо, но я специально выделил: вот таким вот образом. И это именно это и означает.
Если копнуть глубже то это означает, писал Я писал некий алгоритм преобразования одного файла в другой и тут столкнулся с багом.
Начал упрощать, доупращался до такого примитивного случая. Упрощать дальше некуда. Посмотрел в MSDN ничего не нашёл.
Дай думаю спрошу на RSDN может народ в курсе.
N>Ок. Всё это хорошо, но я специально выделил: вот таким вот образом. И это именно это и означает.
N>
N>Если копнуть глубже то это означает, писал Я писал некий алгоритм преобразования одного файла в другой и тут столкнулся с багом.
N>Начал упрощать, доупращался до такого примитивного случая. Упрощать дальше некуда. Посмотрел в MSDN ничего не нашёл.
N>Дай думаю спрошу на RSDN может народ в курсе.
N>Так понятней?
Потоки(stream) в с++ — по умолчанию, это классы для работы с человекочитаемыми текстовыми данными (платформозависимые переводы строк, пропуск пробелов, учет локали при конвертировании и тп). И эту человекочитаемость очень трудно отключить: надо сделать кучу приседаний вокруг этого стрима, чтобы он работал как хотелось. Зачем так задумано я не знаю, и вообще потоки самая противоречивая часть в стл(?). Для работы с бинарным форматом рекомендуют работать с стримбуферами (streambuf), но там тоже иногда проскакивает эта "человекочитаемость" (баг?). Для работы с бинарным представлением файла лучше использовать что-нибудь другое, например низкоуровневые open(O_BINARY)/read/write. А стримы они такие потоки г.... .
Скорее всего, в предыдущих сообщениях тебе хотели сказать про это.
_>Потоки(stream) в с++ — по умолчанию, это классы для работы с человекочитаемыми текстовыми данными (платформозависимые переводы строк, пропуск пробелов, учет локали при конвертировании и тп). И эту человекочитаемость очень трудно отключить: надо сделать кучу приседаний вокруг этого стрима, чтобы он работал как хотелось. Зачем так задумано я не знаю, и вообще потоки самая противоречивая часть в стл(?). Для работы с бинарным форматом рекомендуют работать с стримбуферами (streambuf), но там тоже иногда проскакивает эта "человекочитаемость" (баг?). Для работы с бинарным представлением файла лучше использовать что-нибудь другое, например низкоуровневые open(O_BINARY)/read/write. А стримы они такие потоки г.... . _>Скорее всего, в предыдущих сообщениях тебе хотели сказать про это.
Может быть. Но прямо никто не говорил. А на счёт приседаний. Гм...
Да согдасен, вот Mr.Delphist подсказал солюшен, незнаю откуда он это прочитал, наверно хидера STL просмотрел.
Решается конкретно та проблема вот так, (вроде не так много приседаний?):
Для работы с бинарным форматом рекомендуют работать с > стримбуферами (streambuf), но там тоже иногда проскакивает эта > "человекочитаемость" (баг?). Для работы с бинарным представлением файла лучше > использовать что-нибудь другое, например низкоуровневые > open(O_BINARY)/read/write. А стримы они такие потоки г.... .
Да есть там всё, есть read/write только надо флаги выставить
при октрытии файла и void* в char* перекастовать reinterpret-ом,
)что в контексте STL-ного чистоплюйства выглядит прикольно).
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Нет, надо использовать итераторы потоковых буферов
Здравствуйте, Mr.Delphist, Вы писали:
MD>Возможно, срабатывает "skip witespace", поэтому часть байтов маскируется при чтении. Что если попробовать явно "задавить" такое поведение?
Не надо пробовать, надо использовать итераторы потоковых буферов, у них поведение какое надо, давить ничего не придется.
Просто заменить istream_iterator на istreambuf_iterator, а ostream_iterator на ostreambuf_iterator.