[FICHIERS] : le bug le plus stupide de la création ???
4 réponses
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 !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <vbenner@pageup.fr.invalid> a écrit dans le
message de news: c0vgf0$o5e$1@news-reader4.wanadoo.fr...
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 !
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
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
> 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.
> 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
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
Le code que j'ai donné en exemple est du
code VB4 fonctionnant sur un PC !
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
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
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" <vbenner@pageup.fr.invalid> a écrit dans le
message de news: c11rmk$p51$1@news-reader3.wanadoo.fr...
Le code que j'ai donné en exemple est du
code VB4 fonctionnant sur un PC !
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 !