2010-04-19 7 views
1

J'utilise un listview, et j'essaie de remplir un fichier. J'ai besoin que le fichier soit lu dès que le formulaire démarre.J'ai besoin de lire le fichier à partir du formulaire

private void mainForm_Load(object sender, EventArgs e) 
    { 
     //get file read in 
     if (File.Exists("../../MealDeliveries.txt")) 
     { 
      StreamReader sr = new StreamReader("../../MealDeliveries.txt"); 
      //first line is delivery name 
      string strDeliveryName = sr.ReadLine(); 
      do 
      { 
       //other lines 
       Delivery d = new Delivery(strDeliveryName, sr.ReadLine(), sr.ReadLine(), sr.ReadLine(), sr.ReadLine(), sr.ReadLine(), sr.ReadLine()); 
       mainForm.myDeliveries.Add(d); 
       //check for further values 
       strDeliveryName = sr.ReadLine(); 
       //stop if no more values 
      } while (strDeliveryName != null); 
      displayDeliveries(); 
     } 
    } 


private void displayDeliveries() 
    { 
     lstDeliveryDetails.Items.Clear(); 
     foreach (Delivery d in mainForm.myDeliveries) 
     { 
      lstDeliveryDetails.Items.Add(d.DeliveryName); 
     } 
    } 

La liste n'affiche rien, bien que le fichier soit définitivement là!

Répondre

1

Oui, il devrait supposer que le fichier est à l'endroit où vous pensez qu'il est. Êtes-vous certain que le fichier existe?

Essayez ceci. Cela confirmera au moins si le fichier est trouvé ou non. Une autre chose à surveiller est de lire les lignes sous la forme d'une chaîne à transmettre à votre objet métier (livraison). Vous trouverez peut-être préférable d'utiliser un format de sérialisation fourni par XmlSerializer ou l'un des formats de fichier pris en charge par la bibliothèque Marcos Meli's FileHelpers. De toute façon, quelque chose de plus robuste que la lecture dans les chaînes serait souhaitable.

0

Peut-être que cela fonctionnera, mais vous devez également envelopper IDisposable s avec using. Comme ceci:

using (StreamReader sr = new StreamReader("../../MealDeliveries.txt")) 
{ 
      //first line is delivery name 
      string strDeliveryName = sr.ReadLine(); 
      do 
      { 
       //other lines 
       Delivery d = new Delivery(strDeliveryName, sr.ReadLine(), sr.ReadLine(), sr.ReadLine(), sr.ReadLine(), sr.ReadLine(), sr.ReadLine()); 
       mainForm.myDeliveries.Add(d); 
       //check for further values 
       strDeliveryName = sr.ReadLine(); 
       //stop if no more values 
      } while (strDeliveryName != null); 
      displayDeliveries(); 
} 
+0

Cela a fait beaucoup d'erreurs, pourquoi ai-je besoin d'utiliser? – sark9012

+0

@Luke, les objets StreamReader doivent être éliminés lorsqu'ils ne sont plus nécessaires pour qu'ils puissent nettoyer les ressources qu'ils consomment. L'instruction 'using' déclenchera automatiquement un appel à IDisposable.Dispose() sur les instances non nulles dont elles sont entourées. Il est recommandé d'utiliser la construction using, mais vous pouvez aussi appeler explicitement .Dispose() dans un bloc try/finally. –

Questions connexes