2012-11-26 3 views
1

comme le suggère le titre im essayant d'envoyer un fichier acquis par lecteur de flux à une autre classe afin que cette classe puisse en extraire les informations. J'ai essayé de l'extraire au sein de la forme, mais cela le rend confus et je suis certain que c'est une mauvaise façon de le faire. Quelqu'un peut-il suggérer un moyen?Essayer d'envoyer un fichier à une autre classe en C#

Voici la classe qui identifie le fichier ..

namespace DistanceEstimatorFinal 
{ 
    public partial class Form1 : Form 


     private void openDataListToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      OpenFileDialog ofd = new OpenFileDialog(); 
      ofd.Filter = "CSV files (*.csv)|*.csv|Text files (*.txt)|*.txt |All files (*.*)|*.*"; 
      if (ofd.ShowDialog(this).Equals(DialogResult.OK)) 
      { 
       Stream fileStream = ofd.OpenFile(); 

       using (StreamReader reader = new StreamReader(fileStream)) 
       { 

       } 
      } 
     } 

Maintenant, je besoin d'une certaine façon de l'envoyer ici ... Je ne vois pas comment: [

namespace DistanceEstimatorFinal 
{ 

    public class dataPoints 
    { 
     List<dataPoint> Points; 
     public dataPoints() 
     { 
      Points = new List<dataPoint>(); 
      TextReader tr = new StreamReader(); 
      string input; 
      while ((input = tr.ReadLine()) != null) 
      { 
       string[] bits = input.Split(','); 
       dataPoint a = new dataPoint(bits[0],bits[1],bits[2]);    
       Points.Add(a); 


      } 

      tr.Close(); 
     } 

     internal dataPoint getItem(int p) 
     { 
      if (p < Points.Count) 
      { 
       return Points[p]; 
      } 
      else 
       return null; 
     } 
    } 

} 

Toute aide serait grandement apprécié

+0

Vous rendez cela plus compliqué que nécessaire. pourquoi ne pas passer dans le chemin du fichier à la classe ou dans le constructeur ..? – MethodMan

+0

Note complémentaire: veuillez essayer de suivre les directives de codage C# par défaut pour les échantillons publics - classes/méthodes de nom avec UpperCase (DataPoint) et champs avec camelCase. –

Répondre

5

Je voudrais juste passer le chemin du fichier à votre classe, puis ouvrez le fichier pour la lecture.

if (ofd.ShowDialog(this).Equals(DialogResult.OK)) 
{ 
    var path = ofd.FileName; 

    //Pass the path to the dataPoints class and open the file in that class. 
} 

Vous pouvez transmettre le chemin dans le constructeur de la classe ou à la méthode elle-même en tant que paramètre.

+0

Cela semble être une façon beaucoup plus simple de le faire. Je vais essayer de comprendre comment utiliser votre deuxième texte. Je me bats pour trouver le bon endroit pour mettre le constructeur. Je vous remercie :) – user1744093

1

Le travail de l'interface utilisateur est vraiment juste de comprendre quel fichier doit être traité.

Je voudrais que l'objet métier qui effectue le traitement réel crée également StreamReader.

Si vous ne suivez pas cette approche, votre interface utilisateur est responsable du nettoyage d'une ressource (StreamReader) qu'elle n'utilise pas elle-même. En outre, en séparant complètement le traitement du gestionnaire d'événements de votre interface utilisateur, vous facilitez le traitement du fichier sur un thread séparé si cela devient nécessaire dans le futur.

Questions connexes