2010-04-19 2 views
1

listview를 사용하고 파일을 사용하여 채우려고합니다. 양식이 시작 되 자마자 파일을 읽어야합니다.양식로드에서 파일을 읽어야합니다.

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

분명히 파일이 있지만 목록보기에 아무 것도 표시되지 않습니다!

답변

1

예, 파일이 있다고 생각되는 위치에 있다고 가정해야합니다. 파일이 있다는 것이 긍정적입니까?

시도해보십시오. 적어도 파일이 있는지 여부를 확인합니다.

private void mainForm_Load(object sender, EventArgs e) 
{ 
    string fileName = @"..\..\MealDeliveries.txt"; 

    if (!File.Exists(fileName)) 
    { 
     MessageBox.Show("File not found!"); 
     return; 
    } 

    using (StreamReader sr = new StreamReader(fileName)) 
    { 
     //first line is delivery name 
     string strDeliveryName = sr.ReadLine(); 
     while (strDeliveryName != null) 
     { 
      //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(); 
     } 
    } 
    displayDeliveries(); 
} 

주의해야 할 또 다른 사항은 비즈니스 오브젝트 (전달)로 전달할 문자열로 행을 읽는 것입니다. XmlSerializer에서 제공하는 일종의 serialization 형식이나 Marcos Meli's FileHelpers 라이브러리에서 지원하는 파일 형식 중 하나를 사용하는 것이 더 좋습니다. 어느 쪽이든, 문자열을 읽는 것보다 더 강력한 것이 바람직합니다.

0

어쩌면 작동하지만 어쩌면 IDisposable 초를 using으로 감쌀 수도 있습니다. 이와 같이 :

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

많은 오류가 발생하여 왜 사용해야합니까? – sark9012

+0

@Luke, StreamReader 개체는 더 이상 필요하지 않을 때 처리하여 소비하는 리소스를 정리할 수 있습니다. 'using' 문은 자동으로 IDisposable.Dispose()에 대한 호출을 트리거합니다. using 구문을 사용하는 것이 가장 좋은 방법이지만, try/finally 블록에서 .Dispose()를 명시 적으로 호출 할 수도 있습니다. –

관련 문제