Inclure fichier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Programmes
Messages : 80
Inscription : mer. 24/mai/2006 12:12

Inclure fichier

Message par Programmes »

Bonsoir à tous,
Je voudrais inclure dans un fichier exe de 40 ko un fichier zip de 1 406 509 ko. J'arrive à inclure mon fichier zip dans l'exe mais lors de l'extraction de ce fichier je n'arrive pas à lire le contenu. Je suis sur que j'ai fait une erreur à moins que çà ne soit possible? Voici le code:

Code : Tout sélectionner

OpenFile(0,"C:\Décompression\1.exe")
FileSeek(0,Lof(0))
WriteStringN(0,"###F1###")
TailleFichier=FileSize("C:\Décompression\3.zip")
*Buffer=AllocateMemory(TailleFichier)
ReadData(0,*Buffer,TailleFichier)
Debut=FileSize("C:\Décompression\1.exe")
WriteData(0,*Buffer,TailleFichier)
WriteStringN(0,"###FF1###")
CloseFile(0)
FreeMemory(*Buffer)
OpenFile(0,"C:\Décompression\1.exe")
Fin=FileSize("C:\Décompression\1.exe")
FileSeek(0,Debut)
*MemoryID=AllocateMemory(Fin-Debut)
CreateFile(1,"C:\Décompression\Fifi.zip")
bytes=ReadData(0,*MemoryID,Fin-Debut)
WriteData(1,*MemoryID,bytes)
CloseFile(0)
CloseFile(1)
Un grand merci à tous ce qui pourront me venir en aide!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Inclure fichier

Message par Chris »

Si j'ai bien compris, (pas sur), tu veux inclure un zip, et récupérer un zip
Et si tu te contentais tout simplement de faire comme ça?

Code : Tout sélectionner

If CreateFile(0, "Machin.zip") 
  WriteData(0, ?DebutZip, ?FinZip- ?DebutZip)
  CloseFile(0) 
EndIf


DebutZip: 
IncludeBinary "Machin.zip" 
FinZip: 
Programmes
Messages : 80
Inscription : mer. 24/mai/2006 12:12

Re: Inclure fichier

Message par Programmes »

J'ai essayé et ça ne marche pas. Après plusieurs recherche, c'est parce que la taille du fichier est trop importante...Apparamment avec includebinary ont est limité sur la taille...
Pour être bien clair, le fichier zip est bien inclus dans l'exe mais quand j'extrait le fichier zip est taille de ce fichier est égale à zéro! Tout mon problème est là!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Inclure fichier

Message par Chris »

Programmes a écrit :J'ai essayé et ça ne marche pas. Après plusieurs recherche, c'est parce que la taille du fichier est trop importante...Apparamment avec includebinary ont est limité sur la taille...
Pour être bien clair, le fichier zip est bien inclus dans l'exe mais quand j'extrait le fichier zip est taille de ce fichier est égale à zéro! Tout mon problème est là!
Étonnant. J'ai déjà inclus des fichiers de plus de 2 Mo sans problème et là je viens de faire un include avec un fichier .rar de 6.5 Mo
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Inclure fichier

Message par djes »

Tu as bien la version complète?
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Inclure fichier

Message par graph100 »

Si tu as la version de démo, tu es limité en nombre de ligne, et donc tu ne peux inclure de trop gros fichiers. (dixit Dobro je crois :mrgreen: )
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Inclure fichier

Message par Chris »

C'est vrai qu'il y a toujours cette histoire de version de démo. Je l'oublie toujours, celle-là.

J'ai du mal a assimiler le fait qu'on puisse essayer la version de démo de Pb pendant plus de quinze jours sans avoir envie de l'acheter. :mrgreen:
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Inclure fichier

Message par nico »

Il y a un truc que je comprend pas, que tu utilises un programme externe pour mettre un fichier dans un exe ok, mais à l'extraction c'est l'exe lui même qui doit l'extraire et non pas à partir du programme externe.
Programmes
Messages : 80
Inscription : mer. 24/mai/2006 12:12

Re: Inclure fichier

Message par Programmes »

J'utilise bien la version complète de Purebasic (version 4.51). Par contre, j'ai fait une erreur. Mon fichier zip fait 1,34Go! Es-ce possible de l'inclure dans un exe?
Pour répondre à Nico, je suis tout à fait d'accord que c'est l'exe lui même qui créra le fichier zip. Pour le moment, je fais des essais et j'essaie de comprendre le fonctionnement...
Encore merci pour vos réponses...
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Inclure fichier

Message par nico »

Je me penche dessus, normalement c'est très simple.
Programmes
Messages : 80
Inscription : mer. 24/mai/2006 12:12

Re: Inclure fichier

Message par Programmes »

Sympa!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Inclure fichier

Message par Chris »

Inclure un fichier de plus de 1 Go dans un exe, c'est pas trop le top, surtout du point de vue du téléchargement.

Il vaut mieux avoir un .exe de taille raisonnable, et des librairies additionnelles.
Ca a moins tendance à décourager le client qui voudrait télécharger le programme, et ça facilite les mises à jour.
Programmes
Messages : 80
Inscription : mer. 24/mai/2006 12:12

Re: Inclure fichier

Message par Programmes »

Qu'es-ce que tu entends par des librairies additionnelles? Là, je ne vois pas...
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Inclure fichier

Message par nico »

Voilà:
IL faut compiler les deux codes en ascii ou unicode


Code : Tout sélectionner

;programme qui sert à injecter un fichier dans un exe

File$="C:\Users\nicolas\Desktop\Extraction.zip" ;penser à changer le chemin et le nom du fichier
Fichier$ = GetFilePart(File$)

If OpenFile(0,"C:\Users\nicolas\Desktop\test.exe");penser à changer le chemin
  LongueurFichier.l=Lof(0)
  FileSeek(0,LongueurFichier)
  If ReadFile(1,File$)
    LongueurZip.l=Lof(1)
    *buffer=AllocateMemory(LongueurZip)
    ReadData(1,*buffer,LongueurZip)
    CloseFile(1)
    WriteData(0,*buffer,LongueurZip)
    WriteLong(0,LongueurZip)
    WriteString(0,Fichier$, #PB_Ascii) ;mettre #PB_Unicode si vous compilez en unicode
    WriteLong(0,StringByteLength(Fichier$ , #PB_Ascii)) ;mettre #PB_Unicode si vous compilez en unicode
    FreeMemory(*buffer)
    ret.l=1
  EndIf 
  CloseFile(0)
EndIf

If ret
  Texte.s="Opération réussie"
Else 
  Texte="Echec de l'opération"
EndIf

MessageRequester("Info",Texte)

Code : Tout sélectionner

; compiler dans le même mode (ascii ou unicode) que l'injecteur
; l'exe a pour nom test.exe, c'est important pour l'exemple
; Extraction du fichier contenu dans l'Exe

If ReadFile(0,"test.exe") ; l'exe s'ouvre lui même
  LongueurFichier.l=Lof(0)
  
  FileSeek(0,LongueurFichier-4)
  LongueurName.l=ReadLong(0)
  
  FileSeek(0,LongueurFichier-LongueurName-4)
  *bufferName=AllocateMemory(LongueurName)
  ReadData(0,*bufferName,LongueurName)
  Name.s=PeekS(*bufferName,LongueurName)
                                                   
  MessageRequester("Info",Name)
  
  FileSeek(0,LongueurFichier-4-LongueurName-4)
  LongueurZip.l=ReadLong(0)
  
  If LongueurZip<>0
    FileSeek(0,LongueurFichier-4-LongueurName-4-LongueurZip)
    *buffer=AllocateMemory(LongueurZip)
    ReadData(0,*buffer,LongueurZip)
    If CreateFile(0,"copie_"+Name) ; extrait le fichier à la racine
      WriteData(0,*buffer,LongueurZip)
      CloseFile(0)
      ret=1
    EndIf 
    FreeMemory(*buffer)
  EndIf
  CloseFile(0)
EndIf

If ret
  Texte.s="Opération réussie"
Else 
  Texte="Echec de l'opération"
EndIf

MessageRequester("Info",Texte)
Dernière modification par nico le sam. 11/juin/2011 23:11, modifié 5 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Inclure fichier

Message par Chris »

Programmes a écrit :Qu'es-ce que tu entends par des librairies additionnelles? Là, je ne vois pas...
Je me suis mal expliqué.
Ça dépend de ce que tu veux faire comme programme.

Par exemple, si c'est un programme qui sert à faire du dessin 3D, tu peux inclure quelques modèles dans l'exe pour que l'utilisateur puisse commencer à se familiariser avec le logiciel, et ensuite mettre d'autre modèles dans des sortes de "librairies", (des archives compactées en fait) que l'utilisateur pourrait télécharger au fur et a mesure de ses besoins (ou de ses finances :mrgreen: ).

Il y a beaucoup de programmes qui fonctionnent comme ça.
Band in A Box, par exemple. (Demande à Dobro, il doit connaître)

C'est un logiciel qui permet de faire des arrangements musicaux automatiquement.
Le logiciel contient quelques librairies de rythmes et d'arrangements, mais si tu veux vraiment l'utiliser, tu est pratiquement obligé de télécharger les librairies additionnelles. (Après passage à la caisse, évidemment. :lol: )
Répondre