OVH Cloud OVH Cloud

[FICHIERS] : le bug le plus stupide de la création ???

4 réponses
Avatar
Vincent BENNER - PAGE UP
Bonjour,

Je suis en train réaliser une procédure de découpage
(split) de fichier pour l'implémenter dans un PDA.

Je n'ai pas le droit d'utiliser le type BYTE car il n'existe
pas dans le PDA. Afin de tester, j'ai écrit cette procédure

Dim s AS String * 1
FFScr = FreeFile
Open FileName For Binary As #FFScr * 1
FFDst = FreeFile
Open FileDest For Binary As #FFDst * 1

While Not EOF(FFScr)
Get #FFScr, , s
Put #FFDst, , s
Wend

Close FFDst
Close FFScr


Voilà, voilà. Mon fichier en entrée (type binaire) fait 65551 octets.
Mon fichier en sortie en fait quant à lui 65552, soit un octet de plus !!!
Il y a un 00 hexadécimal tout à la fin !!!

Plus bizzare encore... Je découpe le fichier en fichiers de 10000 octets.
Les fichiers 1, 2, 3, 4, 5 et 6 font bien 10000 octets mais le numéro 7
en fait 5552 !

Il y a une génération spontanée d'octets !!!!

Annie Heidi ???

Vincent BENNER

4 réponses

Avatar
ng
Salut,

Pourquoi ne pas prendre des morceaux plus gros ? Par Ko (1024 o) ?

Tu pourrais remplacer ton
While Not EOF(FFScr)
Get #FFScr, , s
Put #FFDst, , s
Wend



Par qqch comme :
Dim i as integer,sBuff as string

For i = 1 To LOF(FFScr) Step 1024
sBuff=Space$(1024)
Get #FFScr,i,sBuff
Put #FFDst, i, sBuff
Next

Ou même en gardant ton octet par octet, je préférerai utiliser un for :
Dim i as integer
For i=1 To LOF(FFSrc)
Get #FFScr, i, s
Put #FFDst, i, s
Next
De plus je ne vois pas l'utilité du *1 dans les Open.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


"Vincent BENNER - PAGE UP" a écrit dans le
message de news: c0vgf0$o5e$
Bonjour,

Je suis en train réaliser une procédure de découpage
(split) de fichier pour l'implémenter dans un PDA.

Je n'ai pas le droit d'utiliser le type BYTE car il n'existe
pas dans le PDA. Afin de tester, j'ai écrit cette procédure

Dim s AS String * 1
FFScr = FreeFile
Open FileName For Binary As #FFScr * 1
FFDst = FreeFile
Open FileDest For Binary As #FFDst * 1

While Not EOF(FFScr)
Get #FFScr, , s
Put #FFDst, , s
Wend

Close FFDst
Close FFScr


Voilà, voilà. Mon fichier en entrée (type binaire) fait 65551 octets.
Mon fichier en sortie en fait quant à lui 65552, soit un octet de plus !!!
Il y a un 00 hexadécimal tout à la fin !!!

Plus bizzare encore... Je découpe le fichier en fichiers de 10000 octets.
Les fichiers 1, 2, 3, 4, 5 et 6 font bien 10000 octets mais le numéro 7
en fait 5552 !

Il y a une génération spontanée d'octets !!!!

Annie Heidi ???

Vincent BENNER




Avatar
Vincent Guichard
> Je suis en train réaliser une procédure de découpage
(split) de fichier pour l'implémenter dans un PDA.



[snip code]

Voilà, voilà. Mon fichier en entrée (type binaire) fait 65551 octets.
Mon fichier en sortie en fait quant à lui 65552, soit un octet de plus !!!
Il y a un 00 hexadécimal tout à la fin !!!




De grandes chances que ton PDA fonctionne en UNICODE (sur deux octets)

To code lit donc les octets 2 par 2... sauf le dernier, qui est tout
seul. Ton programme lui rajoute donc gentilement un petit copain à 0.

Tu peux vérifier en affichant le nombre de fois que tu parcours ta
boucle... Si c'est 2 fois moins que prévus, j'ai juste... sinon, je vois
pas très bien d'ou peut venir le problème.

Donc ton code risque de marcher tant que la taille du fichier est paire,
et de rajouter un caractère nul pour les fichiers de taille impaire.

Vincent Guichard
Avatar
Vincent BENNER - PAGE UP
Le code que j'ai donné en exemple est du
code VB4 fonctionnant sur un PC !

J'ai résolu le problème en faisant une
boucle

For i = 1 to Len(NomFichier)
Get
Put
Next i


à la place de

While Not EOF(Source)
Get
Put
Wend


Mystère....


Vincent BENNER
Avatar
ng
Salut,

Ou même en gardant ton octet par octet, je préférerai utiliser un for :
Dim i as integer
For i=1 To LOF(FFSrc)
Get #FFScr, i, s
Put #FFDst, i, s
Next



C'est effectivement ce que je t'avais dit, la boucle While Wend effectue un
tour supplémentaire par rapport à ce que tu cherches.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


"Vincent BENNER - PAGE UP" a écrit dans le
message de news: c11rmk$p51$
Le code que j'ai donné en exemple est du
code VB4 fonctionnant sur un PC !

J'ai résolu le problème en faisant une
boucle

For i = 1 to Len(NomFichier)
Get
Put
Next i


à la place de

While Not EOF(Source)
Get
Put
Wend


Mystère....


Vincent BENNER