Salut, pour ta barre de progression, tu n'as pas besoin de connaitre ton nombre de lignes. Ton nombre de caractère suffit.
Imaginons que ton fichier à une taille de 8192 octets. (Donc .Length de streamreader vaut 8192)
Imaginons que tu lise ton fichier avec un buffer de 64 octets.
A chaque fois que le buffer est remplit, il est rempli de 64 octets.
Donc pour ta barre de progression, une base comme cela devrait marcher :
Code C# :
public class WorkingBar
{
private ProgressBar bar;
public WorkingBar(ref ProgressBar bar)
{
this.bar = bar;
this.bar.Minimum = 0;
this.bar.Maximum = 100;
}
public void Perform(float value, float total)
{
bar.Value = value / total * 100f;
}
}
Ensuite avec le StreamReader :
Code C# :
private WorkingBar bar;
private char[] buffer;
private StringBuilder result;
public FileReader(ref ProgressBar bar, int bufferSize)
{
bar = new WorkingBar(ref bar);
buffer = new char[bufferSize];
result = new StringBuilder();
}
public void Read(string file)
{
using(StreamReader reader = new StreamReader(file))
{
int currentIndex = 0;
// Tant que l'on est pas à la fin du fichier
while(!reader.EndOfStream)
{
// Remplit le buffer
reader.Read(buffer, currentIndex, buffer.Length);
result.Append(buffer);
currentIndex += buffer.Length;
// Nouvelle valeur de progression
bar.Perform((float)currentIndex, (float)reader.BaseStream.Length);
Application.DoEvents();
// Pause le thread histoire de faire croire que l'on lit un très gros fichier
Thread.Sleep(100);
}
reader.Close();
}
}
Voili voilou, tu devrais pouvoir t'en sortir avec ça...