J'essaye de lire un fichier texte en utilisant le code (collé ci-dessous), mais la dernière ligne du fichier n'est pas lue. Ma logique est-elle correcte?StreamReader.EndOfStream manque la dernière ligne?
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();
}
}
Une autre option est d'utiliser une boucle do-while, et de faire la vérification de la condition pendant reader.Peek()! = -1 – Breakthrough
Je suis d'accord avec Breakthrough, il suffit d'utiliser une boucle contrôlée par le pied et les choses vont bien . Malheureusement, la plupart des programmeurs d'aujourd'hui ne se soucient pas de savoir quand utiliser ce type de boucle. –
@Breakthrough, @BeowulfOF: Comment votre boucle do-while fonctionnerait-elle quand un fichier vide est donné? – RichieHindle