P0lO
Messages postés65Date d'inscriptionmercredi 18 avril 2007StatutMembreDernière intervention12 juin 2008
-
20 août 2007 à 09:34
P0lO
Messages postés65Date d'inscriptionmercredi 18 avril 2007StatutMembreDernière intervention12 juin 2008
-
20 août 2007 à 10:26
Bonjour à tous! Je code en C# pour le Compact Framework
Mon problème est le suivant pour un de mes programmes je doit créer et utiliser des fichiers d'initialisations propre à mon application qui vont me permettre comme leur nom l'indique d'initialiser mon programme,...Ces fichiers peuvent contenir des caractères accentués pour les écrires correctement j'ai donc spécifié le format de codage UTF8 pour mon fichier voici un petit bout de code :
...
System.IO.StreamWriter File = new System.IO.StreamWriter(System.IO.File.Create(IniFileName), System.Text.Encoding.UTF8);
File.WriteLine(...);
...
Aucun problème le fichier ce crée correctement les données sont correctement écrites...
La ou sa me pose problème c'est pour la lecture, en éffet je doit pouvoir lire les informations contenu dans le fichier sachant que l'utilisateur aura éventuellement pu modifier l'ordre dans lequel se trouve les informations donc pour simplifier la lecture je doit pouvoir me replacer dans le flux,...
Je ne sais pas si c'est propre au Compact Framework mais en utilisant un objet StreamReader je ne peut pas me replacer dans le flux j'utilise donc un objet FileStream via la fonctions ReadByte.
Donc pour en venir à mon problème en passant par un FileStream je ne peut pas spécifié de format d'encodage pour le fichier et donc je me retrouve avec des problèmes de lecture notamment une série de trois caractères systématiquement rajouté en début du fichier j'ai éssayé de convertir les bytes lus via les méthodes Encoding.Convert ou encore par exemple la méthode Encoding.UTF8.GetString mais je n'arrive à rien de concluant j'ai toujours le même problème,...
Donc comment je peut faire pour lire correctement mon fichier avec un FileStream??? éxiste t-il un moyen pour pouvoir se replacer dans un StreamReader???(ne me dites pas en utilisant le BaseStream du StreamReader sa ne fonctionne pas)
En éspérant que quelqun puisse m'aider,...
Je remercie d'avance ceux qui éssayerons de m'aider (et j'espert réussirons).
PS : petite précision la lecture se fait correctement avec avec un objet StreamReader,...
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 20 août 2007 à 10:07
Salut,
Le FileStream ne permet pas de spécifier d'encodage car il ne sert pas à lire du texte (enfin ça, tu devais le savoir :p)
Concernant ton problème de caractères ajoutés en début de fichier, il s'agit du préambule qui permet de déterminer le type d'encoding du fichier. (il n'est cependant pas oligatoire, donc tu peux rencontrer des fichiers UTF8 sans ce préambule, mais dans ton cas tu devrais toujours l'avoir)
Pour UTF8, le préambule est : EF BB BF
Pour UTF16LE : FF FE
Pour UTF16BE : FE FF
Pour UTF32LE : FF FE 00 00
Pour UTF32BE : 00 00 FE FF
Bref, tu ne dois pas inclure les 3 premiers octets du fichier s'ils sont EF BB BF, ils ne font pas partie des données en elle même.
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 20 août 2007 à 09:50
Je ne connais pas la taille du fichier en question, mais s'il n'est pas trop volumineux, tu pourrais le charger en méméoire avec un StreamReader, en stockant les lignes une par une dans une liste de string, et ensuite travailler directement sur cette copie en mémoire (dans ta liste de string tu peux te placer où tu veux sans problèmes)
<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
P0lO
Messages postés65Date d'inscriptionmercredi 18 avril 2007StatutMembreDernière intervention12 juin 20081 20 août 2007 à 10:04
J'y est éfféctivement pensé mais le fichier en question peut devenir relativement volumineux (quelques 100ène de ligne) et le problèmes est que mon application est déja relativement gourmande en mémoire et que lorsque que j'initialise mon application avec ce fichier j'ai un certain nombre d'actions à éffectuer comme tester des fichiers pouvant dépasser le Go de données donc je garde cette solution en ultime recours,...
Merci quand même,...
P0lO
Vous n’avez pas trouvé la réponse que vous recherchez ?
P0lO
Messages postés65Date d'inscriptionmercredi 18 avril 2007StatutMembreDernière intervention12 juin 20081 20 août 2007 à 10:26
C'était ce que je pensait donc au final tout ce que je peut faire c'est vérifier le type de codage du fichier et "zapper" les premiers bytes lus si il s'agit des bytes signalant le codage UTF8,...
Merci de m'avoir aidé,...
et un tag résolu un,...