2016-05-03 15 views
0

Ich habe folgenden Code:Python shutil, vollständige Datei wird nicht ins Archiv geschrieben. Versuchte zipfile auch

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") 

Ich versuche, eine Datei in folder_03\file\demo\ zu schreiben und zip dann den Inhalt des Ordners folder_03. Alles funktioniert gut.

Es gibt nur ein Problem. Die Datei images.jpgwird am Ende abgezogen.

Es wird wie erwartet in folder\file\demo\images.jpg geschrieben, aber im Zip-Archiv ist die Datei nicht abgeschlossen. Etwa 300 Bytes werden vom Ende entfernt. Ist es ein Fehler im Dienstprogramm python zip? Ich habe auch mit zipfile versucht, hatte aber das gleiche Problem.

Die Bytes in head1, head2, head3 hier sind nur Beispiele.

+0

Wird die Datei nicht gerade komprimiert, wenn sie in ein Archiv gestellt wird? –

+0

Ja ist es komprimiert. Aber wenn ich dieses Archiv entziehe und diese Bilddatei erneut überprüfe. Einige Bytes von letzten fehlen. Die Datei in der Demo-Datei wird jedoch korrekt geschrieben. – user1111111111111

Antwort

1

Sie schließen die Datei nicht. Verwenden Sie f.close(), nachdem Sie die Datei geschrieben haben, oder noch besser, verwenden Sie eine 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

Die image.png ist in Ordnung erstellt. Aber nach dem Zip ist die image.png aus irgendeinem Grund nicht vollständig – user1111111111111