2016-05-03 38 views
0

我有以下代碼:Python shutil,完整的文件沒有被寫入存檔。試圖壓縮文件也

import os 
import sys 
import shutil 
import binascii 
import zipfile 

code = "testing111" 

head1 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01") 
head2 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01") 
head3 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01") 

evilbuff = bytearray(head1) 
evilbuff += code 
evilbuff += bytearray(head2) 
evilbuff += code 
evilbuff += bytearray(head3) 

file = "folder\\file\\demo\\images.png" 
f = open(file,mode='wb') 
f.write(evilbuff) 

file2 = sys.argv[2] 
shutil.make_archive("myzip", "zip", "demo_03") 
print ("[+] Done") 

我試圖寫在folder_03\file\demo\一個文件,然後壓縮folder_03文件夾的內容。一切工作正常。

只有一個問題。文件images.jpg在末尾被剝離。

它在​​中按預期寫入,但在zip歸檔文件中文件不完整。 從結尾開始剝離大約300個字節。它在Python zip實用程序中的一些錯誤?我也嘗試過使用zipfile,但有同樣的問題。

這裏的head1, head2, head3中的字節只是示例。

+0

當文件被放入存檔時,文件是不是被壓縮了? –

+0

是它的壓縮。但是,如果我提取該檔案並再次檢查該圖像文件。最後一些字節丟失。但是演示程序中的文件是正確寫入的。 – user1111111111111

回答

1

您未關閉文件。在寫入文件後使用f.close(),或者甚至使用context manager

import os 
import sys 
import shutil 
import binascii 
import zipfile 

code = "testing111" 

head1 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01") 
head2 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01") 
head3 = ("\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01") 

evilbuff = bytearray(head1) 
evilbuff += code 
evilbuff += bytearray(head2) 
evilbuff += code 
evilbuff += bytearray(head3) 

file = "folder\\file\\demo\\images.png" 
with open(file, mode='wb') as file_object: 
    file_object.write(evilbuff) 

file2 = sys.argv[2] 
shutil.make_archive("myzip", "zip", "demo_03") 
print ("[+] Done") 
+0

image.png創建正常。但在zip之後,image.png由於某種原因未完成 – user1111111111111