129 / 31 / 3
Регистрация: 03.08.2010
Сообщений: 630
|
||||||
1 | ||||||
Копирование файла с проверкой09.11.2017, 22:41. Показов 984. Ответов 11
Метки нет (Все метки)
Код:
Кликните здесь для просмотра всего текста
Задача: скопировать файл по частям, проверяя копирование на ошибки после каждой части. Зачем: конечное устройство часто совершает ошибки при записи на него, поэтому копировании больших файлов (>1ГБ) возможно только по частям и с проверкой каждой части. Алгоритм: 1. Открываем FileStream на чтение исходного файла, на запись в конечный и на чтение с конечного. 2. Читаем часть исходного файла (размер каждой части, допустим, 250 Мб) в память, затем пишем в конечный. Затем читаем, что записали в конечный и сверяем с тем, что записывали. 3. Если не совпадает, то повторно копируем часть. Если совпадает, переходим к следующему. 4. Так до конца файла. Проблема: каждая часть всегда с первого раза проходит проверку (part == verifyPart). Но если в конце просто сравнить файлы исходный и конечный файлы, то они всегда разные (из-за конечного ошибок конечного устройства). Т.е. алгоритм не работает и verifyFS почему-то всегда читает верные данные. Добавлено через 16 минут Я думаю, здесь дело в буферизации и кэшировании. verifyFS по факту читает не с конечного файла, а с кэша (оно и видно по скорости чтения - слишком уж быстро).
0
|
09.11.2017, 22:41 | |
Ответы с готовыми решениями:
11
Копирование определенного текста из файла, копирование и вставка в статичную переменную Копирование с проверкой Копирование файлов с проверкой Копирование с одной таблицы в другую с проверкой |
129 / 31 / 3
Регистрация: 03.08.2010
Сообщений: 630
|
|
10.11.2017, 08:12 [ТС] | 3 |
Rius, любое устройство, подключенное по USB. Исправить пока нет возможности, поэтому приходится придумывать вот такое.
0
|
Usaga
|
10.11.2017, 11:29
#4
|
0
|
129 / 31 / 3
Регистрация: 03.08.2010
Сообщений: 630
|
|
10.11.2017, 11:40 [ТС] | 5 |
Usaga, не понял. У вас есть альтернативный вариант?
0
|
12074 / 8383 / 1281
Регистрация: 21.01.2016
Сообщений: 31,578
|
|
10.11.2017, 11:48 | 6 |
Сидорович, заменить устройство. И это основной вариант.
0
|
129 / 31 / 3
Регистрация: 03.08.2010
Сообщений: 630
|
|
10.11.2017, 11:48 [ТС] | 7 |
Usaga,
Дело не столько в самом устройстве, сколько в USB-контроллере. Соответственно, любая флешка, подключённая в любому USB порту лажает.
0
|
12074 / 8383 / 1281
Регистрация: 21.01.2016
Сообщений: 31,578
|
|
10.11.2017, 11:52 | 8 |
Сидорович, проблема (по мимо сбойного ПК, воевать с багами которого - дурость) в том, что буферизация и кеширование - вопросы драйверов ОС, а не вашей программы. Т.е. повлиять на что-то тут будет сложно.
0
|
129 / 31 / 3
Регистрация: 03.08.2010
Сообщений: 630
|
|
10.11.2017, 11:57 [ТС] | 9 |
Итак: как сделать файловый поток, который не будет читать из буфера? *пошёл гуглить*
0
|
12074 / 8383 / 1281
Регистрация: 21.01.2016
Сообщений: 31,578
|
|
10.11.2017, 12:24 | 10 |
Сидорович, вы это
... не заметили, да? Гуглите, как работать с драйверами устройств или ФС напрямую (такое возможно). Добавлено через 1 минуту Не по теме: Есть неслабая вероятность того, что к тому моменту, когда разберётся и наваяете что-то рабочее (если получится), вы бы уже два раза успели заработать на новый ПК или, как минимум, на ремонт старого. Добавлено через 10 минут Кстати, я так и не понял как в такой ситуации: ... вы собрались что-то проверять. Если контроллер гонит, то вы никак уже не можете доверять всем его действиям и данным, что он возвращает.
0
|
129 / 31 / 3
Регистрация: 03.08.2010
Сообщений: 630
|
|
10.11.2017, 12:25 [ТС] | 11 |
0
|
1142 / 851 / 262
Регистрация: 30.04.2009
Сообщений: 3,580
|
|
12.11.2017, 21:08 | 12 |
Если контроллер не пропускает данные т.е. с размером файла при записи все нормально, то можно попробовать записать весь файл, а потом по кускам проверять. Если кусок плохой - то перезаписывать его прямо внутри файла (используя FileMode.Open при открытии и установку позиции записи с помощью FileStream.Seek, не проверял, но должно сработать).
0
|
12.11.2017, 21:08 | |
12.11.2017, 21:08 | |
Помогаю со студенческими работами здесь
12
Копирование файлов с проверкой их наличия в списке копированных ранее Копирование данных из одной книги excel в другую с проверкой параметров Получение данных из файла с проверкой даты изменения файла Написать форму для загрузки файла на сервер, в свою рабочую папку (с проверкой размера файла) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |