Enregistrer tableau dans fichier à acces direct

Signaler
Messages postés
64
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
6 juin 2007
-
Messages postés
64
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
6 juin 2007
-
Bonjour à tous!!!

J'ai un petit problème..

J'ai une classe:

Public

Class SasN

Public StatusSas
As
Long

Public in_PORTE(4)
As
Byte

Public in_NomPorte(4)
As
String

Public in_Supp_interVerrou
As
Boolean

Public in_Formol_EC
As
Boolean

Public in_Formol_OK
As
Boolean

Public stat_P_Pre_epur
As
Integer

Public stat_P_Formol
As
Integer

Public stat_M_ouvre(4)
As
Boolean

Public stat_Aut_ouvre(4)
As
Boolean

Public stat_Etat
As
Byte

Public stat_Tempo1
As
Integer

Public stat_P_nok_lock
As
BooleanEnd

Class

Et j'instancie un objet :  Public

SasN1
As
New SasN

--->Mon but est d'enregistrer cet objet(et ces propriétés) dans un fichier à acces direct(comme ca ce fait tout naturellement en VB6). J'arrive bien à calculer la taille en octet de l'objet comme il est necessaire(avec ma ptite fonction LenSasN1) pour ouvrir le fichier:
FileOpen(Canal, CFG_FILE_NAME, OpenMode.Random, , , LenSasN1())

--->Mais lorsque je veux écrire l'objet dans le fichier avec: FilePutObject(Canal, SasN1, Num)

à l'éxecution ca me met : "L'E/S de fichier de type "SasN1" n'est pas valide"
Alors j'ai bien essayé de sérialiser ma classe car _FABIEN dans un précedent message l'avait fait pour des structures, mais ca ne marche pas... Est-ce parcequ'il y a des tableaux comme propriétés de mon objet  je ne sais pas et ca me gene beaucoup!!

Si quelqu'un a voit une solution je lui en serais très reconnaissant!!Meme si la seule solution est d'utiliser un autre type de fichier je prend quand meme..

MERCI d'avance!
peace

Ce qui se conçoit bien s'énonce clairement...

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Oui, c'est normal puisque ta structure n'a pas de taille fixe : Ta variable in_NomPorte
est de type String, donc, de longueur inconnue.
Si tu voulais y stocker un champ texte de 4 caractères (et non pas 4 variables de type Chaine), il te faut la déclarer As Byte et convertir String <--> Byte
Je ne sais pas si sous .Net on a le droit à ce type de définition qui pourrait aussi résoudre ton problème :
Public in_NomPorte(4) AsString * 12
où le "* 12" définit un champ de type String mais de longueur fixe de 12 caractères.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
64
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
6 juin 2007

Merci pour ta reponse! J'étais trop fatigué hier pour y penser.. le as string*9 n'est plus pris en charge en vb.net mais l'autre solution ( conversion string-->byte) marche très bien et me suffit!
Encore merci.
Au plaisir!

Ce qui se conçoit bien s'énonce clairement...
Messages postés
64
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
6 juin 2007

Bonjour!!
En fait ca ne suffit pas a résoudre le problème, toujours la meme erreur... Je ne comprend pas pourquoi il ne trouve pas ca valide..Je cherche..

Ce qui se conçoit bien s'énonce clairement...