[RESOLU] Catchfile()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

[RESOLU] Catchfile()

Message 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) :?
Dernière modification par Anonyme 2 le mar. 15/mai/2012 15:08, modifié 5 fois.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Catchfile()

Message 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 ?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: Catchfile()

Message par Anonyme 2 »

Non mais j'aimerais comme même une réponse à mon problème please :cry:
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Catchfile()

Message 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
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Catchfile()

Message par SPH »

Graph100, tu as parfaitement detaillé ton code. Merci :idea:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Catchfile()

Message par graph100 »

De rien :D
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Catchfile()

Message par SPH »

Juste un truc, si on catch dans la memoire un EXE, on peux le lancer ? Si oui, comment ? :?:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: Catchfile()

Message par Anonyme 2 »

SPH c'est exactement ce que je cherche à faire lol, je m'explique mal je sais :|
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Catchfile()

Message par kernadec »

bonjour
runprogram() devrait suffire après l'extraction

cordialement
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: Catchfile()

Message 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 :?:
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Catchfile()

Message 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
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: Catchfile()

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Catchfile()

Message 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 :?
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: Catchfile()

Message par Anonyme 2 »

Obligé de passer par les API windows? :?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Catchfile()

Message 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 :)
Répondre