StreamReader.EndOfStream manquant dernière ligne?
Je suis en train de lire un fichier texte en utilisant le code (collé ci-dessous), mais la dernière ligne du fichier ne soit pas lu. Est ma logique correcte?
using (StreamReader reader = new StreamReader(stream))
{
try
{
string line = reader.ReadLine();
string[] data = BreakLine(line);
while (!reader.EndOfStream)
{
data = BreakLine(line);
DataRow dr = _DataTable.NewRow();
//protect against overflow
int maxColumns = Math.Min(_DataTable.Columns.Count, data.Length);
for (int i = 0; i < maxColumns; i++)
{
dr[i] = data[i];
}
_DataTable.Rows.Add(dr);
line = reader.ReadLine();
}
return _DataTable;
}
finally
{
reader.Close();
reader.Dispose();
stream.Close();
}
}
Vous devez vous connecter pour publier un commentaire.
Voici le problème: parce que vous avez ceci:
comme la dernière ligne de votre
while
de la boucle, il va lire à la dernière ligne, puis le jeter parce que lawhile
condition sera de retour faux.Je pense que vous avez besoin de ceci:
De sorte que vous venez de lire chaque ligne que la première chose que vous faites chaque tour de la boucle.
Une astuce - vous n'en avez pas besoin dans le bloc finally:
Puisque vous avez un bloc using pour "lecteur", il sera automatiquement éliminés pour vous, même si il y a une exception.