Fichier quelconque en chaîne

cs_Sharkiller Messages postés 80 Date d'inscription dimanche 12 octobre 2003 Statut Membre Dernière intervention 25 avril 2011 - 31 janv. 2006 à 15:32
cs_Sharkiller Messages postés 80 Date d'inscription dimanche 12 octobre 2003 Statut Membre Dernière intervention 25 avril 2011 - 31 janv. 2006 à 21:27
Bonjour,
Je souhaite savoir s'il est possible d'assigner le contenu d'un fichier (par exemple un exécutable) à une chaîne (pour copier le fichier en quelque sorte)...
D'après moi, le début ressemblerait à cela:

Dim n As Integer
Dim temp,chaine as String
Open filename For Input As #1
Do While Not EOF(1)
n=n+1
Line Input #1,temp
If n=1 then
chaine=temp
Else
chaine=chaine & vbcrlf & temp
End If
Loop

Mais hélas, ça ne me donne pas tout le contenu de l'exécutable... alors qu'avec un fichier texte, ça marche...

Je vous remercie par avance de votre aide

15 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 23
31 janv. 2006 à 15:59
Ton code a pourtant l'air bon.

Il peut même être amélioré, sans être modifié fonctionnellement (n ne sert à rien).







Dim temp,chaine as String

chaine=""

Open filename For Input As #1

While Not EOF(1)

Line Input #1,temp

chaine=chaine & temp & vbcrlf

Wend


Par contre, le contenu d'un executable peut donner des résultats
bizarres quand tu éditeras 'chaine', car il peut contenir un tas de
caractères ascii tordus (saut de page, return carriages, ... )
As-tu déjà vu ce que donnait un exécutable ouvert avec Notepad ?


Manu
0
cs_Sharkiller Messages postés 80 Date d'inscription dimanche 12 octobre 2003 Statut Membre Dernière intervention 25 avril 2011
31 janv. 2006 à 16:28
Oui, en effet, j'ai déja ouvert un exécutable dans le bloc-notes...
Peut-être faudrait-il tout convertir en ASCII, puis reconvertir ensuite lors de l'enregistrement...

Merci à toi pour ta réponse... pourrais-tu me fournir davantage de détails ?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
31 janv. 2006 à 16:45
la méthode Line Input totalement inadaptée pour un fichier non texte.



Open filename For Input As #1

temp = Input(LOF(1), #1)

Close #1

Daniel
0
cs_Sharkiller Messages postés 80 Date d'inscription dimanche 12 octobre 2003 Statut Membre Dernière intervention 25 avril 2011
31 janv. 2006 à 17:23
En effet Gobillot... mais avec la méthode que tu donnes ça me dit que "L'entrée dépasse la fin de fichier" dès que j'ouvre un fichier autre que texte...

Comment faire ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 48
31 janv. 2006 à 17:34
salut,

tu as une erreur aussi avec as bynary?
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 48
31 janv. 2006 à 17:35
i*
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
31 janv. 2006 à 17:41
un caractère doit indiquer une fin de fichier,

je cherche ... ?

preuve qu'il faut ouvrir en binaire

Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
31 janv. 2006 à 17:48
présence du caractère &H1A indique fin de fichier --> chr$(26)

à vérifier ...

Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
31 janv. 2006 à 17:52
en binaire, il n'y a pas ce problème:









Open filename For Binary As #1

temp = Space$(LOF(1))

Get #1, , temp

Close #1

MsgBox Len(temp)


Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
31 janv. 2006 à 18:06
normal dans les anciens fichers Texte chr$(26) Ctrl Z indiquait une fin de fichier

pour ceux qui ont connu EDLIN un super éditeur DOS.


Daniel
0
cs_Sharkiller Messages postés 80 Date d'inscription dimanche 12 octobre 2003 Statut Membre Dernière intervention 25 avril 2011
31 janv. 2006 à 20:10
Je suis un peu perdu là par contre...
A quoi cela sert-il de le mettre en Binaire ?

Quand je le prend en binaire ça me sort un ensemble de chiffres... c'est sensé faire ça ?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
31 janv. 2006 à 20:20
je confirme, Line Input s'arrête aussi au caractère chr$(26)

quand tu lis en binaire, tu peux lire tout le fichier, les caractères tels qu'ils sont

ce que signifie ces caractères ça dépend du type de fichier

(tu peux lire aussi directement dans un tableau de Bytes)

ce que tu peux faire avec çà ? un éditeur hexa, une recherche de
chaîne, une modif de caractères, une copie du fichier, tout est
possible ...

mais surtout pas MsgBox temp

Daniel
0
cs_Sharkiller Messages postés 80 Date d'inscription dimanche 12 octobre 2003 Statut Membre Dernière intervention 25 avril 2011
31 janv. 2006 à 20:34
Ah OK... mais après, comment reconvertir les données binaires pour reconstituer le fichier ?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
31 janv. 2006 à 20:47
explique ce que tu veux faire ???

parce que le fichier est bon tel quel

tu peux le réécrire (sous un autre nom par sécurité) en binaire avec Put #1, , temp et même en Output avec Print#1,temp;

quand on connait le format du fichier, on peut aller chercher les
données à l'endroit exact où elles sont et avoir besoin de les
convertir, par exemple un fichier BMP, aller chercher la taille, la
résolution, etc ...

mais pour un fichier quelconque on peut trouver n'importe quoi et je vois pas ce qu'on peut convertir sans connaître.

Daniel
0
cs_Sharkiller Messages postés 80 Date d'inscription dimanche 12 octobre 2003 Statut Membre Dernière intervention 25 avril 2011
31 janv. 2006 à 21:27
Ben c'est pour transférer un fichier d'un ordinateur vers un autres à l'aide du réseau.
J'ai voulu copier le contenu du fichier à envoyer pour le renvoyer à l'ordinateur distant pour que ce soit plus rapide (ce qui devrait être le cas).
Donc en fait je voudrais copier le contenu d'une application par exemple (en connaissant l'extension), de l'envoyer sur l'autre ordinateur et de le reconstituer en le mettant dans un fichier de même extension.
Ainsi, le fichier serait restitué correctement, mais le problème vient de là...
0
Rejoignez-nous