私は大きなファイル転送(たとえば4GB程度)を持っており、shutilを使用するのではなく、通常のファイル方法で開いて書き込むだけなので、進行状況のパーセンテージを含めることができます。
その後、何らかの理由でファイルの書き込みが途中で中断した場合に、ファイルの書き込みを再開しようと試みることになりました。でも運がなかった。ソースファイルの読み取りをオフセットすることとseekを使用することの巧妙な組み合わせになると思いましたが、今のところ運がありません。何か案は?
さらに、ファイルの読み取りと書き込みの際に使用するブロックサイズを把握するための動的な方法はありますか?私はその分野にかなり慣れていないので、大きなファイルには大きなサイズを使用するために読んでいます(現在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に書き込みます。何か案は?