Я шифрую некоторые файлы с помощью python, но у меня возникают проблемы с чтением фрагмента файла по фрагменту.
Иногда не возвращаются все данные последнего блока.
Когда файл имеет длину 307200 байт, у меня нет проблем.
Когда это 279363 байта, я делаю.
Я запустил этот фрагмент кода на 2 файлах (соответственно 307200 и 279363 байта)
chunksize = 65536
w = open(filename + '.' + str(cs) + '.split', 'wb')
tdata = f.read(307200)
w.write(tdata)
w.close
infile.open(filename + '.' + str(cs) + '.split', 'rb')
while True:
chunk = infile.read(chunksize)
print "Chunk length: " + str(len(chunk))
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += ' ' * (16 - len(chunk) % 16)
И я получил это:
File 1 (307200):
Chunk length: 65536
Chunk length: 65536
Chunk length: 65536
Chunk length: 65536
Chunk length: 45056
Chunk length: 0
File 2 (279363):
Chunk length: 65536
Chunk length: 65536
Chunk length: 65536
Chunk length: 65536
Chunk length: 16384
Chunk length: 0
Как видите, сумма всех размеров фрагментов первого файла верна, а сумма второго файла НЕ верна. И я понятия не имею, почему.
Моя версия Python - 2.6.5
(Работает на Ubuntu 10.04.2 LTS)
* Редактировать: Моя собственная глупая ошибка. Я использовал w.close
вместо w.close()
перед чтением файла, который я только что написал, и это вызвало проблему.