У меня большая передача файлов (скажем, 4 ГБ или около того), и вместо того, чтобы использовать shutil, я просто открываю и записываю его обычным способом, чтобы я мог включить процент прогресса по мере его продвижения.
Затем мне пришло в голову попытаться возобновить запись в файл, если по какой-то причине он прекратился во время процесса. Мне не повезло, хотя. Я предположил, что это будет разумная комбинация смещения чтения исходного файла и использования поиска, но пока мне не повезло. Есть идеи?
Кроме того, существует ли какой-то динамический способ определить, какой размер блока использовать при чтении и записи файлов? Я довольно новичок в этой области, и просто прочитал, чтобы использовать больший размер для большего файла (в данный момент я использую 65536). Есть ли умный способ сделать это, или можно просто догадаться ..? Спасибо, ребята.
Вот фрагмент кода передачи добавляющегося файла:
newsrc = open(src, 'rb')
dest_size = os.stat(destFile).st_size
print 'Dest file exists, resuming at block %s' % dest_size
newsrc.seek(dest_size)
newdest = open(destFile, 'a')
cur_block_pos = dest_size
# Start copying file
while True:
cur_block = newsrc.read(131072)
cur_block_pos += 131072
if not cur_block:
break
else:
newdest.write(cur_block)
Он добавляет и начинает запись, но затем записывает dest_size данных в конце больше, чем это должно быть по понятным причинам для остальных из вас. Есть идеи?