OVH Cloud OVH Cloud

lecture 'binaire' en C# ou .Net

4 réponses
Avatar
bart s.
bj

J'essai de faire mon premier programme .Net en C# ...
Le debut est un peut laborieu, deux heures pour ne pas arriver a lire un
fichier !
Y'a deja fallu trouver caspol.exe pour traité les problemes de securite (ca
commence bien) car j'ai mis mon projet sur un partage reseau, du coup
l'executable n'a pas acces au ressource disque !
Bref, j'ai deux questions concernant le code suivant:

System.IO.StreamReader dict = new
System.IO.StreamReader("c:\\tmp\\dict.txt");
String s;
while (dict.Peek() != -1)
{
s=dict.ReadLine();
listBox1.Items.Add(s);
}
dict.Close();

1/ je trouve bizarre d'etre obligé d'utiliser la fct Peek() pour detecter la
fin de mon fichier (g pas trouve l'equivalent de feof() qui est qd meme plus
parlant) ?

2/ mon fichier contient des accents (codé en ISO-8859-1 ie Windows), et
bien, lors de la lecture de mon fichier les accents sont bouffés ! g essayé
ca:

System.IO.StreamReader dict = new
System.IO.StreamReader("c:\\tmp\\dict.txt",System.Text.Encoding.ASCII);

ca na pas resolu mon probleme. en fait je voudrais pouvoir ouvir mon fichier
en mode "binaire" (ie sans gestion d'encoding) sachant que j'ai utilisé
StreamReader parceque c'était a priori le seul objet qui dispose de la
methode ReadLine(). La question est donc d'avoir l'equivalent .Net de (en C,
ecrit en 20 secondes !):

FILE *fd;
char ligne[1000];
fd=fopen("dict.txt","rb");
while(!feof(fd))
{
fgets(ligne,1000,fd);
}
fclose(fd);

sans comportement a la c.. ! (accent bouffé ou autre)

merci de vos lumieres (je suppose qu'il n'est pas possible d'utilisé le
Runtime C a partir d'un source C# ?).

4 réponses

Avatar
Christophe Lauer [MS]
Bonjour,

bart s. wrote:
bj

J'essai de faire mon premier programme .Net en C# ...
Le debut est un peut laborieu, deux heures pour ne pas arriver a lire
un fichier !
Y'a deja fallu trouver caspol.exe pour traité les problemes de
securite (ca commence bien) car j'ai mis mon projet sur un partage
reseau, du coup l'executable n'a pas acces au ressource disque !



C'est effectivement normal, la sécurité .NET considère que tout binaire qui
n'est pas strictement local est potentiellement dangereux, et il vous faut
donc effectuer une configuration de sécurité spécifique pour lui attribuer
les permissions manquantes.

Bref, j'ai deux questions concernant le code suivant:


<CUT/>

ca na pas resolu mon probleme. en fait je voudrais pouvoir ouvir mon
fichier en mode "binaire" (ie sans gestion d'encoding) sachant que
j'ai utilisé StreamReader parceque c'était a priori le seul objet qui
dispose de la methode ReadLine(). La question est donc d'avoir
l'equivalent .Net de (en C, ecrit en 20 secondes !):



Dans le cas présent, l'utilisation d'un BinaryReader ne serait-elle pas plus
appropriée ?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemiobinaryreaderclasstopic.asp

Au passage, pour les questions spécifiquement .NET et/ou C#, je vous invite
à poster sur la hiérarchie microsoft.public.fr.dotnet.* depuis le serveur
msnews.microsoft.com ou un de ses mirroirs.

Cdt,

--
Christophe Lauer - Relations Techniques Editeurs de Logiciels
Division Développeurs et Plateforme d'Entreprise - Microsoft France
http://www.microsoft.com/france/msdn/
This posting is provided "AS IS" with no warranties, and confers no rights.
Avatar
bart s.
> Dans le cas présent, l'utilisation d'un BinaryReader ne serait-elle pas
plus
appropriée ?



Oui, mais dans ce cas il va falloir que je code la fct ReadLine()
(inexistante de la classe BinaryReader).
Dans le nom ".Net Framework" je pensais que Framework avait un sens. Je
m'apercois sur ce simple exemple que .Net ne va pas me faire gagner du
temps...
De plus la notion d'Encoding est tj presente ds 1 des constructeurs de
BinaryReader, c'est pas vraiment conforme a l'idee que je me fais de la
notion de binaire (un octet reste un octet, y'a pas a faire la quelconque
transco ou interpretation !)

Au passage, pour les questions spécifiquement .NET et/ou C#, je vous
invite
à poster sur la hiérarchie microsoft.public.fr.dotnet.* depuis le serveur
msnews.microsoft.com ou un de ses mirroirs.




en effet. merci
Je clos ce Thread, FU2 microsoft.public.fr.dotnet
Avatar
Christophe Lauer [MS]
Bonjour,

bart s. wrote:
Oui, mais dans ce cas il va falloir que je code la fct ReadLine()
(inexistante de la classe BinaryReader).
Dans le nom ".Net Framework" je pensais que Framework avait un sens.
Je m'apercois sur ce simple exemple que .Net ne va pas me faire
gagner du temps...



Très sincèrement, ça ne me choque pas qu'un BinaryReader n'ait pas de
méthode ReadLine(). Sémantiquement, une ligne délimitée par un CR/LF est une
notion propre aux fichiers texte, et pas aux fichiers binaires... Qu'en
pensez-vous ?

Cdt,

--
Christophe Lauer
Relations Techniques Editeurs de Logiciels
Division Développeurs et Plateforme d'Entreprise - Microsoft France
http://www.microsoft.com/france/msdn/

This posting is provided "AS IS" with no warranties, and confers no
rights.
Avatar
bart s.
"Christophe Lauer [MS]" a écrit dans le
message de news: 41a5aa7a$0$17593$
Bonjour,

bart s. wrote:
Oui, mais dans ce cas il va falloir que je code la fct ReadLine()
(inexistante de la classe BinaryReader).
Dans le nom ".Net Framework" je pensais que Framework avait un sens.
Je m'apercois sur ce simple exemple que .Net ne va pas me faire
gagner du temps...



Très sincèrement, ça ne me choque pas qu'un BinaryReader n'ait pas de
méthode ReadLine(). Sémantiquement, une ligne délimitée par un CR/LF est
une
notion propre aux fichiers texte, et pas aux fichiers binaires... Qu'en
pensez-vous ?




tout a fait d'accord.
mais mon probleme initiale etait un probleme avec StreamReader !
mon probleme est resolu (cf NG microsoft.public.fr.dotnet.csharp, objet 'je
dois mal faire')