Je rencontre un problème pour lire le fichier avec StreamReader
et pendant que line != null
j'ajoute à textBox1
Code:
using(StreamReader reader = new StreamReader("lastupdate.txt"))
{
string line;
while((line = reader.ReadLine()) != null)
{
textBox1.Text = line;
}
reader.Close();
}
Cela ne fonctionne pas et je ne sais pas pourquoi. J'ai essayé d'utiliser using StreamReader
, j'ai téléchargé le fichier à partir de l'URL et je peux voir dans le dossier que le fichier est téléchargé. Le lastupdate.txt
a une taille de 1 Ko.
Ceci est mon code de travail actuel avec MessageBox
. Si je supprime la MessageBox
, le code ne fonctionne pas. Il faut attendre ou je ne sais pas:
WebClient client = new WebClient();
client.DownloadFileAsync(new Uri(Settings.Default.patchCheck), "lastupdate.txt"); // ok
if(File.Exists("lastupdate.txt"))
{
MessageBox.Show("Lastupdate.txt exist");
using(StreamReader reader = new StreamReader("lastupdate.txt"))
{
string line;
while((line = reader.ReadLine()) != null)
{
textBox1.Text = line;
MessageBox.Show(line.ToString());
}
reader.Close();
}
File.Delete("lastupdate.txt");
}
Essayez:
StringBuilder sb = new StringBuilder();
using (StreamReader sr = new StreamReader("lastupdate.txt"))
{
while (sr.Peek() >= 0)
{
sb.Append(sr.ReadLine());
}
}
textbox.Text = sb.Tostring();
Si vous voulez le texte dans la zone de texte, il serait beaucoup plus efficace de tout le lire et de le mettre ensuite dans la zone de texte:
var lines = File.ReadAllLines("lastupdate.txt");
textBox1.Lines = lines; //assuming multi-line text box
ou:
textBox1.Text = File.ReadAllText("lastupdate.txt");
Modifier:
Après la dernière mise à jour - vous téléchargez le fichier de manière asynchrone - il peut même ne pas être là, que partiellement là ou dans un état intermédiaire entre l'exécution du code.
Si vous voulez juste que la chaîne de texte dans le fichier ne la télécharge pas, utilisez plutôt DownloadString
:
string text = "";
using (WebClient wc = new WebClient())
{
text = wc.DownloadString(new Uri(Settings.Default.patchCheck));
}
textBox1.Text = text;
Essaye ça :
using(StreamReader reader = new StreamReader(Path))
{
string line = reader.ReadLine();
while(line != null)
{
textBox1.Text += line;
line = reader.ReadLine()
}
reader.Close();
}
Web Client utilise une méthode DownloadFileAsync plutôt bizarre. Le type de retour est nul, il n'est donc pas attendu. De plus, cela signifie que nous n’avons même pas reçu de tâche, il est donc impossible de continuer avec. Cela nous laisse avec l'utilisation de l'événement DownloadFileCompleted.
const string FileName = "lastupdate.txt";
private void DownloadLastUpdate() {
var client = new WebClient();
client.DownloadFileCompleted += ( s, e ) => {
this.UpdateTextBox( e.Error );
client.Dispose();
};
client.DownloadFileAsync( new Uri( Settings.Default.patchCheck ), FileName );
}
Je suis allé avec un paramètre d'exception facultatif pour relayer tous les messages d'exception. N'hésitez pas à refactoriser à votre guise. File.ReadLines génère du texte ligne par ligne, les fichiers volumineux ne doivent donc pas utiliser beaucoup de mémoire.
private void UpdateTextBox( Exception exception = null ) {
textBox1.Text = string.Empty;
if ( exception != null ) {
textBox1.Text = exception.Message;
return;
}
if ( !File.Exists( FileName ) ) {
textBox1.Text = string.Format( "File '{0}' does not exist.", FileName );
return;
}
var lines = File.ReadLines( FileName );
textBox1.Text = string.Join( Environment.NewLine, lines );
}
la réponse donnée ci-dessus est correcte, mais dans votre code, changez simplement 1 ligne:
textBox1.Text += line;