Takitak
Messages postés8Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention25 mai 2008
-
25 mai 2008 à 20:34
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 2009
-
26 mai 2008 à 03:36
Bonsoir :) .
Voila je travaille actuellement sur un projet qui neccesite que j'enregistre des renseignements dans un fichier binaire , hors au moment de l'enregistrement j'ai l'erreur suivante :
" Longueur d'enregistrement incorrecte."
L'erreur ne se produit pas lorque je met des noms petit ou des prenoms petit. (ou bien que je ne met pas de region de passage , ce qui retire
La structure dans laquelle je met mes renseignements (et c'est cette structure que j'enregistre dans le fichier binaire ) est celle ci :
Structure Candidat
'structure pour engreistrer un candidat
Dim nom
As
String
Dim prenom
As
String
Dim adresse
As
String
Dim codepostal
As
Integer
Dim ville
As
String
Dim age
As
Integer
Dim civilite
As
String
Dim numetudiant
As
Integer
Dim regionpassage
As
String
Dim tee()
As
Boolean
Dim teo()
As
Boolean
End
Structure
Les deux derniers tableaux de booleen servent a retrouver les matieres que le candidat a selectionner.
Voila si quelqu'un pouvait m'aider a trouver une solution de facon a ce que je puisse enresgistrer le fichier de facon corect.
Si ca plante lors de ma soutenance , ca le fera moyen , c'est le seul probleme que je rencontre.
Est il possible "d'agrandir" la taille des emplacement ou j'enregistre dans mon fichier.(ce qui suis est ma boucle d'enregistrement dans le fichier).
Cand.nom = Lblnom.Text
Cand.prenom = Lblprenom.Text
Cand.adresse = Lbladresse.Text
Cand.codepostal = Lblcodepostal.Text
Cand.ville = Lblville.Text
Cand.age = Lblage.Text
Cand.civilite = Lblciv.Text
Cand.numetudiant = numetudiant
Cand.regionpassage = Lblregion.Text
'a remetre mais comment?
ReDim Cand.tee(11)
'alloue le tableau des 6 boolean(vrai si cocher , et faux sinon , pour afficher les pays dans lesquelq sont sotcker les persones)
Dim k
As
Integer
For
Each cb
As CheckBox
In Frmepreuve.Pnlepreuveecrite.ControlsCand.tee(k) = cb.Checked
'met true ou false dans le tableau,pour retrouver ensuite les pays cochéek = k + 1
Next
ReDim Cand.teo(8)
'alloue le tableau des 6 boolean(vrai si cocher , et faux sinon , pour afficher les pays dans lesquelq sont sotcker les persones)
Dim l
As
Integer
For
Each cb
As CheckBox
In Frmepreuve.Pnlepreuveorale.ControlsCand.teo(l) = cb.Checked
'met true ou false dans le tableau,pour retrouver ensuite les pays cochéel = l + 1
Next
If modification =
True
ThenCand.numetudiant = Frmrenseignement.Lblnumetudiant.Text
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 25 mai 2008 à 21:32
Salut,
FilePut est une fonction obsolète, sans doute hérité de VB6. Donc ce que j'en dis, c'est de plutot utiliser un BinaryReader et BinaryWriter (System.IO):
Shared Function Load(File As String) As Candidat
Dim r As New IO.BinaryReader(IO.File.Create("C:\Fichier.dat"))
Dim Cand As New Candidat
Cand.nom = r.ReadString
Cand.
prenom
= r.ReadString
Cand.
adresse
= r.ReadString
Cand.
codepostal
= r.ReadString
.....
r.Close
Return Cand
End Sub
Shared
Sub Save(File as String, Cand As Candidat)
Dim w As New IO.BinaryWriter(IO.File.Create("C:\Fichier.dat"))
Takitak
Messages postés8Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention25 mai 2008 25 mai 2008 à 22:05
Je me posais une question : il y a t'il un nombre limite de chose que l'on puisse mettre dans une structure?
(ou alors comment faire pour limiter les champ dans la structure , par exemple dans mon sujet , le nom est limite a 8 caracteres)
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 26 mai 2008 à 03:36
Je suggère que tu fixe la taille de tes tableaux tee et
teo dans ta structure, ça évitera que sa taille ne varie.
"Je me posais une question : il y a t'il un nombre limite de chose que
l'on puisse mettre dans une structure?"
Que veux-tu dire? Le nombre de membres ou la taille totale de la structure? Dans les 2 cas, cette limite est très élevé.
"ou alors comment faire pour limiter les champ dans la structure , par
exemple dans mon sujet , le nom est limite a 8 caracteres"
On peut définir des structures fixes pour interagir avec des données non-managé à partir du code managé, voici un exemple:
<StructLayout(LayoutKind.Sequential)> _
Friend Structure MIXERCONTROL
<FieldOffset(0)> Public cbStruct As Integer ' size in Byte of MIXERCONTROL
<FieldOffset(4)> Public dwControlID As Integer ' unique control id for mixer device
<FieldOffset(8)> Public dwControlType As Integer ' MIXERCONTROL_CONTROLTYPE_xxx
<FieldOffset(12)> Public fdwControl As Integer ' MIXERCONTROL_CONTROLF_xxx
<FieldOffset(16)> Public cMultipleItems As Integer ' if MIXERCONTROL_CONTROLF_MULTIPLE set
<FieldOffset(20), MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=8)> Public szShortName As String
<FieldOffset(36), MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=64)> Public szName As String
<FieldOffset(100)> Public lMinimum As Integer ' Minimum value
<FieldOffset(104)> Public lMaximum As Integer ' Maximum value
<FieldOffset(108), MarshalAs(UnmanagedType.ByValArray, SizeConst:=10, ArraySubType:=UnmanagedType.AsAny)> Public reserved() As Integer
End Structure
Tu peux aussi utiliser les attributs suivants :
<VBFixedArray>
<VBFixedString>
MSDN:
"La fonctionnalité My permet une meilleure productivité et de meilleures performances dans les opérations d'E/S sur fichier que FilePut"