«Стандартный» предлагаемый способ копирования файлов, например, через c ++:
ifstream ins;
ofstream out s;
// I've omitted the opening of those stream, since it is not important for the following question.
s << ins.rdbuf();
Теперь проблема в том, что вышеприведенная строка может потерпеть неудачу, а в некоторых случаях, особенно та, которую я 'Поговорим о том, что я никак не могу понять, что что-то пошло не так.
Предположим, что входной поток на самом деле представляет собой большой файл, например, на удаленном компьютере NAS.Теперь могут быть ошибки подключения, из-за которых дескриптор файла будет неверным.Пытаясь смоделировать это, я использовал большой файл, в отладчике я остановился на этой строке, нашел дескриптор, затем продолжил отладчик и затем принудительно закрыл дескриптор файла (через обработчик процессов пакета sysinternals).
Результат: строка завершена, файл копируется неправильно, иногда он вообще не копируется, иногда закрывается только часть файла.В отличие от документации оператора << и rdbuf (), установка плохого состояния / сбоя отсутствует, и не выдается исключение. </p>
Единственное, что я могу заметить, это то, что когдаПри попытке закрыть поток ввода возникает исключение.
У кого-нибудь такое же явление ?!Есть ли способ проверить / проверить это на правильность завершения?
С уважением,