2012-11-26 5 views
1

, в качестве заголовка предлагается попытка попыток отправить файл, полученный потоковым считывателем, в другой класс, чтобы этот класс мог извлечь из него информацию. Я попытался извлечь его в форме, но это делает его запутанным, и я уверен, что это плохой способ сделать это. Может ли кто-нибудь предложить способ?Пытаясь отправить файл другому классу в C#

Вот класс, который идентифицирует файл ..

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)) 
       { 

       } 
      } 
     } 

Теперь мне нужно каким-то образом отправить его здесь ... Я не могу видеть, как: [

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; 
     } 
    } 

} 

Любая помощь был бы оценен

+0

Вы делаете это более сложным, чем это должно быть. почему бы не пройти по пути файла к классу или в конструкторе ..? – MethodMan

+0

Замечание: попробуйте следовать стандартным правилам кодирования C# для общедоступных образцов - классов/методов класса с помощью UpperCase (DataPoint) и полей с помощью camelCase. –

ответ

5

Я бы просто передал путь файла к вашему классу, а затем откройте файл для чтения.

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. 
} 

Вы можете передать путь в конструкторе класса или самому методу в качестве параметра.

+0

Это похоже на гораздо более простой способ сделать это. Я постараюсь выяснить, как сделать ваш второй бит текста. Я изо всех сил стараюсь найти подходящее место для размещения конструктора. Спасибо :) – user1744093

1

Задача пользовательского интерфейса - это действительно просто выяснить, какой файл необходимо обработать.

У меня был бы бизнес-объект, который выполняет фактическую обработку, также создает StreamReader.

Если вы не соблюдаете этот подход, ваш пользовательский интерфейс отвечает за очистку ресурса (StreamReader), который он сам не использует.

Кроме того, отделив обработку полностью от обработчика событий в пользовательском интерфейсе, вы упростите обработку файла в отдельном потоке, если это станет необходимым в будущем.

Смежные вопросы