Page 1 sur 2

[RESOLU] Catchfile()

Publié : jeu. 26/avr./2012 18:31
par Anonyme 2
EDIT:
CatchImage() permet de charger l'image, puis ensuite de pouvoir l'utiliser directement. Un CatchFile() existerait-il?
C'est à dire: Comment utiliser directement un fichier que l'on a mis dans le bloc mémoire *Buffer alloué?

Graph100, ton code permet seulement de mettre en mémoire le fichier, mais après?
Par exemple, j'aimerais faire un OpenFile() mais comme deuxième paramètre, au lieu du NomFichier$, ca serait le bloc mémoire *Buffer ou est contenus le fichier (ce qui évite d'associer un fichier) :?

Re: Catchfile()

Publié : jeu. 26/avr./2012 19:02
par graph100
bah, enfin !!

Code : Tout sélectionner


DataSection
	premier_pointeur:
	IncludeBinary "monfichier.sonextension"
	pointeur_fin:
EndDataSection


; pour récupérer le fichier :

taille_fichier = ?pointeur_fin - ?premier_pointeur

*buffer = AllocateMemory(taille_fichier)

CopyMemory(?premier_pointeur, *buffer, taille_fichier)

; tu peux aussi exploiter le fichier sans le copier si as juste besoin de l'adresse mémoire de début : ?premier_pointeur, et de la taille :)
me semble que ça fait l'affaire ?

Re: Catchfile()

Publié : jeu. 26/avr./2012 21:06
par Anonyme 2
Non mais j'aimerais comme même une réponse à mon problème please :cry:

Re: Catchfile()

Publié : ven. 27/avr./2012 13:53
par graph100
Dites, ceux qui sont pas des totos, il me semble que mon code devrait répondre à la question de Dzoumaka non ? rassurez moi un instant...

Ensuite, Davyid, franchement, c'est pas à toi de répondre dans des post comme celui-ci, ou tu ne peux clairement pas faire avancer le Schmilblick !

Sinon, pour Dzoumaka :

en lisant ta question, c'est le code qui m'est venu à l'esprit.
Puisque tu as des difficultés à le comprendre, je vais essayer de le l'expliquer, mais avant de dire que tu ne comprenais rien, tu aurais pu essayer de faire des tests avec le bout de code que je t'ai filé !!

Alors, en premier il y a la DataSection. Dans cette partie on va stocker le(s) fichier(s) dont tu parlais dans ton code. Un peu comme une image, sauf que c'est un fichier. Ok ?
pour les images, comme le format est connu, il suffit d'indiquer à la commande de chargement "CatchImage()" la position de début du fichier image.
On le fait de la manière suivante :

Code : Tout sélectionner

monlabel:
monlabel: est un pointeur qui pointe dans la mémoire de l'exécutable lui-même. on l'utilise pour des commandes du type GOTO (c'est d'ailleurs pour ça qu'elle sont dangereuses)
Pour récupérer l'adresse de ce label on fait :

Code : Tout sélectionner

?monlabel
Ca te donne une adresse mémoire qui pointe à l'endroit de l'exécutable ou tu l'a mis.
Et comme ici je l'ai mis avant mon fichier inclus, il me donne l'adresse du début du fichier. Ok ?

Deuxio : comme mon fichier est un fichier quelconque, il n'y a pas moyen de savoir ou il se finit, ni quelle taille il fait. Il faut donc utiliser un deuxième label.
en faisant la soustraction entre les deux :

Code : Tout sélectionner

taille_fichier = ?pointeur_fin - ?premier_pointeur
j'obtiens la taille du fichier. Ok ?

Ensuite, comme on a toutes les infos sur le fichier, on peux l'utiliser, dans mon code d'exemple j'ai choisi de le copier dans un bloc mémoire différent avec CopyMemory(?premier_pointeur, *buffer, taille_fichier)
Mais c'était juste pour donner un exemple de comment utiliser les données fournis !

Par exemple si tu voulais envoyer le fichier à une autre machine par réseaux tu peux faire :

Code : Tout sélectionner

SendNetworkData(clientID, ?premier_pointeur, ?pointeur_fin - ?premier_pointeur)
voila.

Si tu ne comprend toujours pas, réfléchis à ce qui ne passe pas, et pose une question détaillée. Je ne répondrais plus dans le cas contraire...
Il est aussi possible que tu ais mal posée ta question initiale. Alors penses-y

Re: Catchfile()

Publié : sam. 28/avr./2012 8:18
par SPH
Graph100, tu as parfaitement detaillé ton code. Merci :idea:

Re: Catchfile()

Publié : sam. 28/avr./2012 8:52
par graph100
De rien :D

Re: Catchfile()

Publié : sam. 28/avr./2012 10:31
par SPH
Juste un truc, si on catch dans la memoire un EXE, on peux le lancer ? Si oui, comment ? :?:

Re: Catchfile()

Publié : sam. 28/avr./2012 10:43
par Anonyme 2
SPH c'est exactement ce que je cherche à faire lol, je m'explique mal je sais :|

Re: Catchfile()

Publié : sam. 28/avr./2012 10:47
par kernadec
bonjour
runprogram() devrait suffire après l'extraction

cordialement

Re: Catchfile()

Publié : sam. 28/avr./2012 10:50
par Anonyme 2
RunProgram() permet de lancer le fichier spécifié via sa localisation sur le disque dur, mais pas via le *Buffer non? :?
De plus, si ce n'est pas un EXE, comment subsituer le 2ème paramètre de OpenFile() par le *Buffer, ce qui permettra l'utilisation du fichier par la suite :?:

Re: Catchfile()

Publié : sam. 28/avr./2012 10:56
par kernadec
extraire dans un répertoire temporaire
il s'exécute
et tu lui met un autokill quand il a fini son travail,
y à ça sur le forum a "autokill"

ah si c'est un bloc data ou des données tu utilise un tableau ou
une liste et si c'est une image eh bien des commandes sont là pour ça.

Cordialement

Re: Catchfile()

Publié : sam. 28/avr./2012 11:06
par Anonyme 2
ah si c'est un bloc data ou des données tu utilises un tableau ou
une liste
Explication pleaaaase :cry: , à mon avis c'est exactement la réponse que je cherche :o

Re: Catchfile()

Publié : sam. 28/avr./2012 11:10
par Backup
toujours pareil :roll:

le bouton recherche du forum m'a amener ici :
http://www.purebasic.fr/french/viewtopi ... ter+en+ram


faudrait quand meme chercher un peu les gars :?

Re: Catchfile()

Publié : sam. 28/avr./2012 15:59
par Anonyme 2
Obligé de passer par les API windows? :?

Re: Catchfile()

Publié : sam. 28/avr./2012 16:04
par Backup
Purebasic est relativement bas niveau , donc .. oui

les 3/4 des trucs que tu programmera , devront passer par les Api

certains langage dit "evolués" te donneront l'impression, qu'il n'utilisent pas les API
mais en fait si ! , une fonction peut tres bien cacher un appel aux API WIndows ...

je dirait meme , que Sans utilisation des Api , sous window , tu ne fait rien ...


donc , ce genre de réaction , me fait un peu marrer ... hein , c'est pas mechant, hein ...
mais ça fait des années que je lis ce genre d'étonnement ...

ben oui .. un prg sous Windows utilise Forcement les Apis , meme si tu n'en a pas l'impression :)