2016-05-03 1 views
0

je code suivant:Putilisateur shutil, le fichier complet n'est pas écrit dans l'archive. Essayé zipfile aussi

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

Je suis en train d'écrire un fichier dans folder_03\file\demo\ puis zip le contenu du dossier folder_03. Tout fonctionne bien.

Il y a juste un problème. Le fichier images.jpgest dénudé à la fin.

Il est écrit comme prévu dans folder\file\demo\images.jpg mais dans l'archive zip le fichier n'est pas complet. Environ 300 octets sont supprimés de la fin. Est-ce un bug dans l'utilitaire zip python? J'ai aussi essayé avec zipfile mais j'ai eu le même problème. Les octets de head1, head2, head3 ne sont que des exemples.

+0

Le fichier n'est-il pas compressé lorsqu'il est placé dans une archive? –

+0

Oui c'est compressé. Mais si j'extrais cette archive et vérifiais à nouveau ce fichier image. Certains octets de la dernière sont manquants. Cependant, le fichier dans le démo filder est écrit correctement. – user1111111111111

Répondre

1

Vous ne fermez pas le fichier. Utilisez f.close() après avoir écrit le fichier, ou mieux encore, utilisez un 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

l'image.png est créée très bien. Mais après zip, l'image.png n'est pas complète pour une raison quelconque – user1111111111111