J'essaie de lire le contenu d'un fichier avec un StreamReader, qui reçoit un FileStream. Le fichier a quelques espaces à l'intérieur (char 32) et StreamReader les lit comme 0 (char 48). La capture d'écran montre le tampon FileStream et le tampon StreamReader. Les deux ont la valeur 32, mais quand j'appelle Read(), elle renvoie 48. Suis-je manquant quelque chose ici? En passant, le code fonctionne sous .NET Compact Framework.StreamReader retournant un autre caractère
alt text http://www.freeimagehosting.net/uploads/9f72b61bbe.png
Le code qui lit les données:
public void Read() {
using (StreamReader reader = new StreamReader(InputStream, Encoding.UTF8)) {
foreach (var property in DataObject.EnumerateProperties()) {
OffsetInfo offset = property.GetTextOffset();
reader.BaseStream.Position = offset.Start - 1;
StringBuilder builder = new StringBuilder(offset.Size);
int count = 0;
while (reader.Peek() >= 0 && count < offset.Size) {
char c = (char)reader.Read();
if ((int)c != 32 && c != '\r' && c != '\n') {
builder.Append(c);
count++;
} else {
reader.BaseStream.Position++;
}
}
property.SetValue(DataObject,
Convert.ChangeType(builder.ToString(), property.PropertyType, CultureInfo.CurrentCulture),
null
);
}
}
}
EDIT: Modification du codage ne pas travaillé (ni Unicode, ni par défaut)
EDIT: Le l'entrée ressemble à ceci:
000636920000000532000404100100000001041000000001041000000001031000000000000000000000000000000000000000001730173017301730203020302030203021302130213021300027900267841515150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280010000000280010000000280010000020
11009005621011010041621011010041821011013574026011013574226011014564729011014564929011018343318021018343618021020035418021020035618021022583818021022584018021005474302031005474502031010311305031010311505031011265308031011265508031011265508031011274108031021524009
0310215242090310060151130310063110130310160022210310160024210310022837280310022839280310
00206377740002484841000029844400181529330003034081000000000000000000
Le problème se produit avec les espaces qui commencent dans la troisième ligne et va au quatrième.
Bien que je n'ai pas utilisé votre solution, votre test m'a fait penser à appeler lecteur.DiscardBufferedData(), et cela a fait l'affaire. Merci! – Fernando