Je repose ma question, je n'ai toujours pas trouvé de réponses , helas, à ce
probleme
quand j'ecris un Long visiblement il n'est pas correctement ecrit dans le
fichier, il semblerait qu'il soit ecrit en Int dedoublé.....
voila le code.
Dim fname, fichier As String
Dim curoff as Long
Dim i As Integer
curoff = 0 '*** initialise curoff ***
none = 0 '*** offset vide pour fichier vide ***
fname = txtOptionName.Text & ".xnx"
'*** on cree le fichier ***
fichier = App.path & "\" & fname
If FileExists(fichier) Then
rep = MsgBox("Le fichier " & fname & " existe" & vbCrLf &
"Voulez-vous vraiment le remplacer", vbQuestion + vbYesNo, "Remplacer le
fichier")
If rep = vbYes Then
Kill fichier
Else
MsgBox "Compilation annulée", vbInformation + vbOKOnly
Exit Function
End If
End If
'*** bien maintenant on le remplis ***
hFile = FreeFile
Open fichier For Binary As #hFile
'*** ecriture de la signature ***
Put #hFile, , "_XNXXNX_"
'*** reserver la table d'offset ***
offs = repFiles.ListCount + 4
'*** calcul et ecriture des offsets ***
'*** L'offset est égale à :
'*** la taille du fichier concerné
'*** + la taille de la signatue 6 octets
'*** + la taille de tous les offset (4 octets par
offset * offs)
'***
curoff = 8 + (4 * offs)
If repFiles.ListCount > 0 Then
For off = 0 To 0 'repFiles.ListCount - 1
Put #hFile, , curoff
' C'EST ICI QUE CELA NE PRODUIT PAS L'EFFET ATTENDU
curoff = curoff + FileLen(repFiles.List(off))
Next off
End If
'*** offset pour le fichier 0 ***
If txtFichier(0).Text <> "" Then
Put #hFile, , curoff
curoff = curoff + FileLen(txtFichier(0).Text)
Else
Put #hFile, , none
End If
'*** offset pour le fichier 1 ***
If txtFichier(1).Text <> "" Then
Put #hFile, , curoff
curoff = curoff + FileLen(txtFichier(1).Text)
Else
Put #hFile, , none
End If
'*** offset pour le fichier 2 ***
If txtFichier(2).Text <> "" Then
Put #hFile, , curoff
curoff = curoff + FileLen(txtFichier(2).Text)
Else
Put #hFile, , none
End If
'*** offset pour le descriptif ***
If txtFichier(3).Text <> "" Then
Put #hFile, , curoff
curoff = curoff + FileLen(txtFichier(3).Text)
Else
Put #hFile, , none
End If
'*** Fichiers ***
buffer = ""
If repFiles.ListCount > 0 Then
For off = 0 To repFiles.ListCount - 1
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
Zoury
Salut Moi!
Dim fname, fichier As String
fname est déclaré As Variant par défaut car tu n'as pas spécifié son type... Il faut spécifier le type à chaque variable même si elles sont déclarées sur la même ligne.
curoff = 0 '*** initialise curoff *** none = 0 '*** offset vide pour fichier vide ***
none n'est pas déclaré. Si tu ne mets pas Option Explicit au tout début de tes modules, je te conseilles fortement de le faire. Cela force la déclaration des variables employées, t'évitant des problèmes dûes au fautes de frappe et plus de faciliter grandement la maintenance du code. Aussi les variables non déclarées sont des Variants par défaut. Le type Variant est le plus lent qui soit et devrait être évité si possible.
'*** ecriture de la signature *** Put #hFile, , "_XNXXNX_"
'*** reserver la table d'offset ***
offs = repFiles.ListCount + 4
'*** calcul et ecriture des offsets *** '*** L'offset est égale à : '*** la taille du fichier concerné '*** + la taille de la signatue 6 octets '*** + la taille de tous les offset (4 octets par offset * offs) '*** curoff = 8 + (4 * offs)
Dans ce bout de code, la signature prend 16 octets et non 6.. Ausii je ne comprends pas pourquoi offs est égal au nombre de fichiers + 4 dès le départ et pourquoi curoff égal 8 + (offs * 4)? d'où vient le 8?
'*** Fichiers *** buffer = "" If repFiles.ListCount > 0 Then For off = 0 To repFiles.ListCount - 1
buffer = FileRead(repFiles.List(off))
Put #hFile, , buffer
Next off End If
dans ce bout de code la variable buffer n'est pas déclaré (As Variant) et n'est pas utile. ;O)
Que souhaites-tu faire exactement? Peux-tu nous expliquer ton but? Cela nous permettra de comprendre où se situe ton problème de manière plus exacte.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
Salut Moi!
Dim fname, fichier As String
fname est déclaré As Variant par défaut car tu n'as pas spécifié son type...
Il faut spécifier le type à chaque variable même si elles sont déclarées sur
la même ligne.
curoff = 0 '*** initialise curoff ***
none = 0 '*** offset vide pour fichier vide ***
none n'est pas déclaré. Si tu ne mets pas Option Explicit au tout début de
tes modules, je te conseilles fortement de le faire. Cela force la
déclaration des variables employées, t'évitant des problèmes dûes au fautes
de frappe et plus de faciliter grandement la maintenance du code. Aussi les
variables non déclarées sont des Variants par défaut. Le type Variant est le
plus lent qui soit et devrait être évité si possible.
'*** ecriture de la signature ***
Put #hFile, , "_XNXXNX_"
'*** reserver la table d'offset ***
offs = repFiles.ListCount + 4
'*** calcul et ecriture des offsets ***
'*** L'offset est égale à :
'*** la taille du fichier concerné
'*** + la taille de la signatue 6 octets
'*** + la taille de tous les offset (4 octets par
offset * offs)
'***
curoff = 8 + (4 * offs)
Dans ce bout de code, la signature prend 16 octets et non 6.. Ausii je ne
comprends pas pourquoi offs est égal au nombre de fichiers + 4 dès le départ
et pourquoi curoff égal 8 + (offs * 4)? d'où vient le 8?
'*** Fichiers ***
buffer = ""
If repFiles.ListCount > 0 Then
For off = 0 To repFiles.ListCount - 1
buffer = FileRead(repFiles.List(off))
Put #hFile, , buffer
Next off
End If
dans ce bout de code la variable buffer n'est pas déclaré (As Variant) et
n'est pas utile. ;O)
Que souhaites-tu faire exactement? Peux-tu nous expliquer ton but? Cela nous
permettra de comprendre où se situe ton problème de manière plus exacte.
fname est déclaré As Variant par défaut car tu n'as pas spécifié son type... Il faut spécifier le type à chaque variable même si elles sont déclarées sur la même ligne.
curoff = 0 '*** initialise curoff *** none = 0 '*** offset vide pour fichier vide ***
none n'est pas déclaré. Si tu ne mets pas Option Explicit au tout début de tes modules, je te conseilles fortement de le faire. Cela force la déclaration des variables employées, t'évitant des problèmes dûes au fautes de frappe et plus de faciliter grandement la maintenance du code. Aussi les variables non déclarées sont des Variants par défaut. Le type Variant est le plus lent qui soit et devrait être évité si possible.
'*** ecriture de la signature *** Put #hFile, , "_XNXXNX_"
'*** reserver la table d'offset ***
offs = repFiles.ListCount + 4
'*** calcul et ecriture des offsets *** '*** L'offset est égale à : '*** la taille du fichier concerné '*** + la taille de la signatue 6 octets '*** + la taille de tous les offset (4 octets par offset * offs) '*** curoff = 8 + (4 * offs)
Dans ce bout de code, la signature prend 16 octets et non 6.. Ausii je ne comprends pas pourquoi offs est égal au nombre de fichiers + 4 dès le départ et pourquoi curoff égal 8 + (offs * 4)? d'où vient le 8?
'*** Fichiers *** buffer = "" If repFiles.ListCount > 0 Then For off = 0 To repFiles.ListCount - 1
buffer = FileRead(repFiles.List(off))
Put #hFile, , buffer
Next off End If
dans ce bout de code la variable buffer n'est pas déclaré (As Variant) et n'est pas utile. ;O)
Que souhaites-tu faire exactement? Peux-tu nous expliquer ton but? Cela nous permettra de comprendre où se situe ton problème de manière plus exacte.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
moi
Bien visiblement jsuis largué..... la signature prends 16 octets ?????? ce qui signifie qu'un caracteres est codé sur 2 octets donc ?
d'autres part effectivement je n'avais pas fait attention auf fait que chaque declaration devait avoir son type..... je croyais que
Dim curoff, none as Long declarais les deux en Long (grave erreur)
Bien donc en changeant cette simple ligne cela fonctionne comme je le souhaite
Le 8 est la taille de la signature en octets, le commentaire taille de la signature = 6 est erroné
Merci de ton aide...... (c'est penible parfois de buter sur un truc simple que l'on ne vois pas)
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de news:
Salut Moi!
> Dim fname, fichier As String
fname est déclaré As Variant par défaut car tu n'as pas spécifié son
type...
Il faut spécifier le type à chaque variable même si elles sont déclarées
sur
la même ligne.
> curoff = 0 '*** initialise curoff *** > none = 0 '*** offset vide pour fichier vide ***
none n'est pas déclaré. Si tu ne mets pas Option Explicit au tout début de tes modules, je te conseilles fortement de le faire. Cela force la déclaration des variables employées, t'évitant des problèmes dûes au
fautes
de frappe et plus de faciliter grandement la maintenance du code. Aussi
les
variables non déclarées sont des Variants par défaut. Le type Variant est
le
plus lent qui soit et devrait être évité si possible.
> '*** ecriture de la signature *** > Put #hFile, , "_XNXXNX_" > > '*** reserver la table d'offset *** > > offs = repFiles.ListCount + 4 > > '*** calcul et ecriture des offsets *** > '*** L'offset est égale à : > '*** la taille du fichier concerné > '*** + la taille de la signatue 6 octets > '*** + la taille de tous les offset (4 octets par > offset * offs) > '*** > curoff = 8 + (4 * offs)
Dans ce bout de code, la signature prend 16 octets et non 6.. Ausii je ne comprends pas pourquoi offs est égal au nombre de fichiers + 4 dès le
départ
et pourquoi curoff égal 8 + (offs * 4)? d'où vient le 8?
> '*** Fichiers *** > buffer = "" > If repFiles.ListCount > 0 Then > For off = 0 To repFiles.ListCount - 1 > > buffer = FileRead(repFiles.List(off)) > > Put #hFile, , buffer > > Next off > End If
dans ce bout de code la variable buffer n'est pas déclaré (As Variant) et n'est pas utile. ;O)
Que souhaites-tu faire exactement? Peux-tu nous expliquer ton but? Cela
nous
permettra de comprendre où se situe ton problème de manière plus exacte.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
Bien visiblement jsuis largué..... la signature prends 16 octets ??????
ce qui signifie qu'un caracteres est codé sur 2 octets donc ?
d'autres part effectivement je n'avais pas fait attention auf fait que
chaque declaration devait avoir son type..... je croyais que
Dim curoff, none as Long declarais les deux en Long (grave erreur)
Bien donc en changeant cette simple ligne cela fonctionne comme je le
souhaite
Le 8 est la taille de la signature en octets, le commentaire taille de la
signature = 6 est erroné
Merci de ton aide...... (c'est penible parfois de buter sur un truc simple
que l'on ne vois pas)
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:Oc4HraQtDHA.2208@TK2MSFTNGP10.phx.gbl...
Salut Moi!
> Dim fname, fichier As String
fname est déclaré As Variant par défaut car tu n'as pas spécifié son
type...
Il faut spécifier le type à chaque variable même si elles sont déclarées
sur
la même ligne.
> curoff = 0 '*** initialise curoff ***
> none = 0 '*** offset vide pour fichier vide ***
none n'est pas déclaré. Si tu ne mets pas Option Explicit au tout début de
tes modules, je te conseilles fortement de le faire. Cela force la
déclaration des variables employées, t'évitant des problèmes dûes au
fautes
de frappe et plus de faciliter grandement la maintenance du code. Aussi
les
variables non déclarées sont des Variants par défaut. Le type Variant est
le
plus lent qui soit et devrait être évité si possible.
> '*** ecriture de la signature ***
> Put #hFile, , "_XNXXNX_"
>
> '*** reserver la table d'offset ***
>
> offs = repFiles.ListCount + 4
>
> '*** calcul et ecriture des offsets ***
> '*** L'offset est égale à :
> '*** la taille du fichier concerné
> '*** + la taille de la signatue 6 octets
> '*** + la taille de tous les offset (4 octets par
> offset * offs)
> '***
> curoff = 8 + (4 * offs)
Dans ce bout de code, la signature prend 16 octets et non 6.. Ausii je ne
comprends pas pourquoi offs est égal au nombre de fichiers + 4 dès le
départ
et pourquoi curoff égal 8 + (offs * 4)? d'où vient le 8?
> '*** Fichiers ***
> buffer = ""
> If repFiles.ListCount > 0 Then
> For off = 0 To repFiles.ListCount - 1
>
> buffer = FileRead(repFiles.List(off))
>
> Put #hFile, , buffer
>
> Next off
> End If
dans ce bout de code la variable buffer n'est pas déclaré (As Variant) et
n'est pas utile. ;O)
Que souhaites-tu faire exactement? Peux-tu nous expliquer ton but? Cela
nous
permettra de comprendre où se situe ton problème de manière plus exacte.
Bien visiblement jsuis largué..... la signature prends 16 octets ?????? ce qui signifie qu'un caracteres est codé sur 2 octets donc ?
d'autres part effectivement je n'avais pas fait attention auf fait que chaque declaration devait avoir son type..... je croyais que
Dim curoff, none as Long declarais les deux en Long (grave erreur)
Bien donc en changeant cette simple ligne cela fonctionne comme je le souhaite
Le 8 est la taille de la signature en octets, le commentaire taille de la signature = 6 est erroné
Merci de ton aide...... (c'est penible parfois de buter sur un truc simple que l'on ne vois pas)
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de news:
Salut Moi!
> Dim fname, fichier As String
fname est déclaré As Variant par défaut car tu n'as pas spécifié son
type...
Il faut spécifier le type à chaque variable même si elles sont déclarées
sur
la même ligne.
> curoff = 0 '*** initialise curoff *** > none = 0 '*** offset vide pour fichier vide ***
none n'est pas déclaré. Si tu ne mets pas Option Explicit au tout début de tes modules, je te conseilles fortement de le faire. Cela force la déclaration des variables employées, t'évitant des problèmes dûes au
fautes
de frappe et plus de faciliter grandement la maintenance du code. Aussi
les
variables non déclarées sont des Variants par défaut. Le type Variant est
le
plus lent qui soit et devrait être évité si possible.
> '*** ecriture de la signature *** > Put #hFile, , "_XNXXNX_" > > '*** reserver la table d'offset *** > > offs = repFiles.ListCount + 4 > > '*** calcul et ecriture des offsets *** > '*** L'offset est égale à : > '*** la taille du fichier concerné > '*** + la taille de la signatue 6 octets > '*** + la taille de tous les offset (4 octets par > offset * offs) > '*** > curoff = 8 + (4 * offs)
Dans ce bout de code, la signature prend 16 octets et non 6.. Ausii je ne comprends pas pourquoi offs est égal au nombre de fichiers + 4 dès le
départ
et pourquoi curoff égal 8 + (offs * 4)? d'où vient le 8?
> '*** Fichiers *** > buffer = "" > If repFiles.ListCount > 0 Then > For off = 0 To repFiles.ListCount - 1 > > buffer = FileRead(repFiles.List(off)) > > Put #hFile, , buffer > > Next off > End If
dans ce bout de code la variable buffer n'est pas déclaré (As Variant) et n'est pas utile. ;O)
Que souhaites-tu faire exactement? Peux-tu nous expliquer ton but? Cela
nous
permettra de comprendre où se situe ton problème de manière plus exacte.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
Zoury
> Bien visiblement jsuis largué..... la signature prends 16 octets ?????? ce qui signifie qu'un caracteres est codé sur 2 octets donc ?
j'ai revérifier pour être sûr, dans ton fichier ta signature prend donc bel et bien 8 octets...
Les chaines VB sont conservées en Unicode en mémoire donc ta chaine prend 16 octets lorsqu'en mémoire. Cependant, VB créer une copie de la chaine en format ASCII lorsque le temps de lire la valeur est venu et c'est cette chaine qui est passé inscrite dans le fichier. Tu étais donc correct, désolé pour la confusion.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
> Bien visiblement jsuis largué..... la signature prends 16 octets ??????
ce qui signifie qu'un caracteres est codé sur 2 octets donc ?
j'ai revérifier pour être sûr, dans ton fichier ta signature prend donc bel
et bien 8 octets...
Les chaines VB sont conservées en Unicode en mémoire donc ta chaine prend 16
octets lorsqu'en mémoire. Cependant, VB créer une copie de la chaine en
format ASCII lorsque le temps de lire la valeur est venu et c'est cette
chaine qui est passé inscrite dans le fichier. Tu étais donc correct, désolé
pour la confusion.
> Bien visiblement jsuis largué..... la signature prends 16 octets ?????? ce qui signifie qu'un caracteres est codé sur 2 octets donc ?
j'ai revérifier pour être sûr, dans ton fichier ta signature prend donc bel et bien 8 octets...
Les chaines VB sont conservées en Unicode en mémoire donc ta chaine prend 16 octets lorsqu'en mémoire. Cependant, VB créer une copie de la chaine en format ASCII lorsque le temps de lire la valeur est venu et c'est cette chaine qui est passé inscrite dans le fichier. Tu étais donc correct, désolé pour la confusion.
Merci de poster les réponses au groupe afin d'en faire profiter à tous
moi
Merci en tout cas de ton aide...je n'arrivais pas a m'enlever la M...E de yeux.... ;-)
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de news:%
> Bien visiblement jsuis largué..... la signature prends 16 octets ?????? > ce qui signifie qu'un caracteres est codé sur 2 octets donc ?
j'ai revérifier pour être sûr, dans ton fichier ta signature prend donc
bel
et bien 8 octets...
Les chaines VB sont conservées en Unicode en mémoire donc ta chaine prend
16
octets lorsqu'en mémoire. Cependant, VB créer une copie de la chaine en format ASCII lorsque le temps de lire la valeur est venu et c'est cette chaine qui est passé inscrite dans le fichier. Tu étais donc correct,
Merci de poster les réponses au groupe afin d'en faire profiter à tous
Merci en tout cas de ton aide...je n'arrivais pas a m'enlever la M...E de
yeux.... ;-)
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:%23jGYCnQtDHA.2360@TK2MSFTNGP10.phx.gbl...
> Bien visiblement jsuis largué..... la signature prends 16 octets ??????
> ce qui signifie qu'un caracteres est codé sur 2 octets donc ?
j'ai revérifier pour être sûr, dans ton fichier ta signature prend donc
bel
et bien 8 octets...
Les chaines VB sont conservées en Unicode en mémoire donc ta chaine prend
16
octets lorsqu'en mémoire. Cependant, VB créer une copie de la chaine en
format ASCII lorsque le temps de lire la valeur est venu et c'est cette
chaine qui est passé inscrite dans le fichier. Tu étais donc correct,
Merci en tout cas de ton aide...je n'arrivais pas a m'enlever la M...E de yeux.... ;-)
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de news:%
> Bien visiblement jsuis largué..... la signature prends 16 octets ?????? > ce qui signifie qu'un caracteres est codé sur 2 octets donc ?
j'ai revérifier pour être sûr, dans ton fichier ta signature prend donc
bel
et bien 8 octets...
Les chaines VB sont conservées en Unicode en mémoire donc ta chaine prend
16
octets lorsqu'en mémoire. Cependant, VB créer une copie de la chaine en format ASCII lorsque le temps de lire la valeur est venu et c'est cette chaine qui est passé inscrite dans le fichier. Tu étais donc correct,