StreamReader obtenir et de définir la position
j'ai simplement envie de lire un gros Fichier CSV et enregistrer le Flux de la position dans une liste. Après que j'ai à lire la position à partir de la liste et définissez la position de la Streamreader pour que char et lire une ligne!!
Mais après j'ai lu la première ligne et le retour de la streamposition avec
StreamReader r = new StreamReader("test.csv");
r.readLine();
Console.WriteLine(r.BaseStream.Position);
- je obtenir "177", qui sont le total de caractères dans le fichier! (il est seulement un court examplefile)
je n'ai pas trouvé quelque chose comme ça ici arround qui m'a aidé!
Pourquoi?
Plein methode:
private void readfile(object filename2)
{
string filename = (string)filename2;
StreamReader r = new StreamReader(filename);
string _top = r.ReadLine();
top = new Eintrag(_top.Split(';')[0], _top.Split(';')[1], _top.Split(';')[2]);
int siteindex = 0, index = 0;
string line;
sitepos.Add(r.BaseStream.Position); //sitepos is the a List<int>
while(true)
{
line = r.ReadLine();
index++;
if(!string.IsNullOrEmpty(line))
{
if (index > seitenlaenge)
{
siteindex++;
index = 1;
sitepos.Add(r.BaseStream.Position);
Console.WriteLine(line);
Console.WriteLine(r.BaseStream.Position.ToString());
}
}
else break;
maxsites = siteindex;
}
reading = false;
}
Le fichier ressemble à ceci:
name;age;city
Simon;20;Stuttgart
Daniel;34;Ostfildern
Et ainsi de suite
c'est un Programme d'exercice:
http://clean-code-advisors.com/ressourcen/application-katas
(Katas CSV viewer) je suis actuellement à la literation 3
ReadLine()
sur le StreamReader devrait vous surprendre que vous obtenez à la fin.Le testfile a 11 lignes, le fichier final est d'environ 1,5 GO big 😉
D'accord, pourriez-vous montrer votre
testfile
et aussi le code exact que vous utilisez pour lire?j'ai édité le post
Une solution qui a fonctionné pour moi est ici: stackoverflow.com/a/22975649/718033
OriginalL'auteur coolerfarmer | 2013-11-17
Vous devez vous connecter pour publier un commentaire.
StreamReader
est à l'aide d'un tampon de flux, et doncStreamReader.BaseStream.Position
sera probablement à l'avance le nombre d'octets que vous avez fait de "lire" à l'aide deReadLine
.Il y a une discussion sur la façon de faire ce que vous essayez de le faire dans cette SORTE de question.
OriginalL'auteur Ergwun