Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 2013
-
25 sept. 2007 à 16:54
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 2013
-
26 sept. 2007 à 13:42
Bonjours à vous. toujours aussi débutant -_-' je cherche à enregistrer une série de boolean dans un fichier pour réutilisation. J'ai tout d'abord créer un fichier INI qui inscrit à la suite les 800 valeurs true or false des 20 programmes (soit un fichier ini de 16000 lignes O_o) donc pas top niveau temps de réponses à la lecture.
Ensuite j'ai utilisé le code de NIX :
Public
Sub TableauDeByteVersFicher(
ByVal CheminFichier
As
String,
ByVal TableauDeByte()
As
Byte)
Dim MonFileStream
As
New System.IO.FileStream(CheminFichier, System.IO.FileMode.Create)MonFileStream.Write(TableauDeByte, 0, TableauDeByte.Length - 1)
MonFileStream.Close()
End
Sub
Public
Function FichierVersTableauDeByte(
ByVal CheminFichier
As
String)
As
Byte()
Dim MonFichier
As
New System.IO.FileInfo(CheminFichier)
Dim MonFileStream
As System.IO.FileStream = MonFichier.OpenRead()
Dim TableauDeBytes(MonFileStream.Length)
As
Byte
' On charge le fichier dans un tableau de byteMonFileStream.Read(TableauDeBytes, 0, MonFileStream.Length)
' On ferme le streamMonFileStream.Close()
Return TableauDeBytes
End
Function
Ce qui fonctionne bien mieux, la question est comment inscrire des booleans et non pas des bytes ?
Est-ce possible au moins ? j'ai trouvé dans l'aide l'instruction binaryreader et binarywriter, mais j'ai pas tout pigé de l'exemple -_°
Autre question en rapport avec celle ci, Où et que dois-je mettre pour utiliser les system IO :imports System.IO ? etc.....
Merci pour vos réponses, newbee votre, amicalement @dn
Oui, il faut bien sur écrire chaque groupe de 8 boolean dans un byte. (J'avais oublier de le préciser)
Public Function BooleansToByteArray(ByRef tBool() As Boolean) As Byte()
Dim BLength As Integer = CInt(System.Math.Ceiling(tBool.Length / 8))
Dim tB() As Byte
tB = CType(System.Array.CreateInstance(GetType(Byte), BLength), Byte())
Dim iB As Integer = 0
For iBool As Integer = 0 To tBool.Length - 1 Step 8
Dim B As Byte = 0
For i As Integer = 0 To 7
If iBool + i < tBool.Length Then B += CByte(System.Math.Abs(CInt(tBool(iBool + i))) * _
CInt(System.Math.Pow(2, i)))
Next i
tB(iB) = B
iB += 1
Next iBool
Return tB
End Function
Public Sub TableauDeByteVersFicher(ByVal FileName As String, ByRef TableauDeByte() As Byte)
Using Sr As New System.IO.FileStream(FileName, System.IO.FileMode.Create)
Sr.Write(TableauDeByte, 0, TableauDeByte.Length)
End Using
End Sub, ----
(Coloration syntaxique automatique par Kenji)
Les imports sont a mettre au tout début de ton fichier code.
Ton exception n'as rien a voir avec les Imports
Un imports sert a éviter de mettre l'espace de nom a chaque fois.
Donc, il faut que tu regarde à quel moment il fait l'erreur (débuggage pas-à-pas (F11 par défaut)), et voirce qui provoquerai cette erreur.
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 25 sept. 2007 à 17:24
salut, c'est ce que je fais, j'ai une variable pas(800) as byte, mais le reste du programme travaille sur des pasprog(800) as boolean style if pasprog(1) then blabla... et du coup lorsque j'utilise la fonction ci dessus il me jette car un boolean ne pux etre converti dans un tableau de byte -_-' du coup voila ce que je suis obligé de faire :
pas = FichierVersTableauDeByte(Application.StartupPath & "\prog" & selectprog & ".Ext")
For xx As Short = 0 To pas.Length - 1
pasprog(xx) = CBool(pas(xx))
Next
bon cela marche mais je me retrouve avec 20 fichiers (1 par prog) de 800octets chacun alors que je pourrais en avoir 20 de 100octets codé binaire. M'enfin ce qui m'agace le plus reste tout de meme les :
"Une exception de première chance de type 'System.IO.FileNotFoundException' s'est produite dans mscorlib.dll
Une exception de première chance de type 'System.IO.FileNotFoundException' s'est produite dans mscorlib.dll
Une exception de première chance de type 'System.ArgumentOutOfRangeException' s'est produite dans System.Windows.Forms.dll
Une exception de première chance de type 'System.ArgumentOutOfRangeException' s'est produite dans System.Windows.Forms.dll
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans System.Windows.Forms.dll" a chaque lancement GRRRR.
Merci pour la lecture et @+ pour du 9
Vous n’avez pas trouvé la réponse que vous recherchez ?
Pourquoi mettre des boolean dans un tableau de byte ?
A ta fonction, tu passe directement ton tableau de boolean en parametre, et tu ajoute un à un les booleans dans ton fichier.
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 25 sept. 2007 à 18:12
oui certes, mais a la lecture il me retourne un tableau de byte, que je ne peux pas exploter directement en true, false. mais bon cela mrche comme cela. D'ou ma question enregistrer directement des bool plutot que des bytes. Merci de tes réponses si rapide.
Sinon tu n'a pas une piste pour les execptions qu'il lévent à chaque lancement du debug ? et pour les imports je l'ai met où ?
Et oui plein de questions de newb, mais je suis automaticien à la base XD
@++
Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 26 sept. 2007 à 09:29
merci bien l'ami ! bon j'ai fait le test et cela roule pour ce qui est d'écrire un octet (de 8bits renseigné) dans un fichier ! bravo.
Maintenant avec le systéme de fichier windows le gain est nul. Mon fichier fait toujours 1Ko :( cluster oblige ^^. sinon j'ai bien un fichier de 100octet.
Me reste plus qu'a refaire ta fonction à l'envers, je sens je vais faire une petite recherche sur ce fofo *_*
bien sinon et pour finir si je met en tete de la form ceci :
Imports Microsoft.VisualBasic
Imports System
Imports System.IO
cela doit suffir non ?
portant il continu à me lever des :
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans mscorlib.dll
et autre truc de temps en temps :(
encore merci du coup de pouce et au prochain probleme :p
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 26 sept. 2007 à 13:42
Bon dsl gourage -_-', je viens de me taper toute la séquence d'init de la compile avec F11 (j'aime les for i=0 to 799 O_o), bref et là ya plus d'erreur ! GRRRRRR.
Alors que si je lance la compile en auto il ya toujours ce :
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans mscorlib.dll
Donc cela doit venir de mon thread, malgrés le :
' evite les erreur inter thread/formCheckForIllegalCrossThreadCalls =
FalseBon tant pis, de toute façon cela ne remet en cause le fonctionnement une fois compilé, mais j'aime pas ne pas comprendre ^.^
merci à toi pour ces conseils. @dn
Tiens les balises ne sont pas reconnues ^_____^, zut alors.....