2015-01-27 5 views
0

나는 dragDrop 기능 또는 OpenFileDialog로 열리는 파일의 이름을 표시하는 목록 상자를 가지고 있으며 파일 경로는 List라는 재생 목록에 저장되며 목록 상자에는 경로 및 확장명이없는 이름 만 표시됩니다. 양식을 닫으면 재생 목록 콘텐츠가 .txt 파일로 저장됩니다. 응용 프로그램을 다시 열면 텍스트 파일의 내용이 목록 상자와 재생 목록에 다시 저장됩니다. 그러나 양식을 다시 연 후 새 파일을 추가 할 때 마지막 파일과 최근에 추가 된 파일 사이에 빈 줄이 표시되는 이유를 알 수 없습니다.목록 <string>의 내용을 C#의 텍스트 파일에 저장하는 방법은 무엇입니까?

private void Form1_Load(object sender, EventArgs e) //Form Load!!! 
    { 
     FileInfo info = new FileInfo(Application.StartupPath + "/Text.txt"); 
     if(info.Exists) 
     { 
      if (info.Length > 0) 
      { 
       System.IO.StreamReader reader = new System.IO.StreamReader(Application.StartupPath + "/Text.txt"); //StreamREADER 
       try 
       { 
        do 
        { 
         string currentRead = reader.ReadLine(); 
         playlist.Add(currentRead); 
         listBox1.Items.Add(System.IO.Path.GetFileNameWithoutExtension(currentRead)); 

        } while (true); 
       } 
       catch (Exception) 
       { 
        reader.Close(); 
        listBox1.SelectedIndex = 0; 
       } 
      } 
      else 
      { 
       File.Delete(Application.StartupPath + "/Text.txt"); 
      } 
     } 
     else 
     { 
      return; 
     } 

    } 

:이 같은 txt 파일을 읽는 데 사용되는 코드입니다

private void Form1_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     if(listBox1.Items.Count > 0) 
     { 
      StreamWriter str = new StreamWriter(Application.StartupPath + "/Text.txt"); 
      foreach (String s in playlist) 
      { 
       str.WriteLine(s); 
      } 
      str.Close(); 
     } 

:

내가 txt 파일에서 재생 목록의 내용 (목록)를 작성하는 데 사용할 코드입니다 목록 상자 및 재생 목록에 파일을 추가하는 데 사용되는 코드는 다음과 같습니다.

OpenFileDialog ofd = new OpenFileDialog(); 
     ofd.Title = "Select File(s)"; 
     ofd.Filter = "Audio Files (*.mp3, *.wav, *.wma)|*.mp3|*.wav|*.wma"; 
     ofd.InitialDirectory = "C:/"; 
     ofd.RestoreDirectory = false; 
     ofd.Multiselect = true; 
     ofd.ShowDialog(); 

     foreach (string s in ofd.FileNames) 
     { 
      listBox1.Items.Add(Path.GetFileNameWithoutExtension(s)); 
      playlist.Add(s); 
     } 


     listBox1.SelectedIndex = 0; 

이것은 새로운 파일을 추가 할 때 얻는 것입니다 다시 내 양식을 열어 : !!!!

미리 감사드립니다, 나는 StackOverflow 커뮤니티가 나를 도울 수 있기를 바랍니다! 모든

답변

0

첫째 : 당신의 코드를 디버깅하고 문제를 직접 찾을 수 있습니다 :)

문제가 WriteLine 방법의 사용이다. 마지막으로 작성하는 행은 Write 메소드를 대신 사용해야하므로 끝에 빈 행이 없어야합니다.

// ... 
do 
{ 
    string currentRead = reader.ReadLine(); 
    if (!string.IsNullOrWhiteSpace(currentRead)) // ignore empty lines 
    { 
     playlist.Add(currentRead); 
     listBox1.Items.Add(System.IO.Path.GetFileNameWithoutExtension(currentRead)); 
    } 
} while (true); 
측면 주석으로

: 다른 방법으로 구현하기 쉽게 그러한 같은 재생 목록에 비어 있지 않은 줄을 추가하는 것입니다 while (true) 및 예외 처리를 사용하여 루프를 종료 나쁜 방법입니다.

+0

그래서 나는 다음과 같이 재생 목록의 내용을 작성해야합니다 :'str.Write (s)'네 말이 맞습니까? – ChrisCreateBoss

+0

필요는 없습니다. 이상적으로는 빈 줄을 쓰는 것을 피하십시오. 그리고 지금까지는 파일의 마지막 줄이 하나 있습니다. 따라서 줄 단위로 작성하는 재생 목록을 반복하는 경우 마지막 재생 목록 항목이 아닌 경우 새 줄을 추가해야합니다. 일반적으로'Write (s)'를 사용하면 여러 재생 목록 항목에 대해 작동하지 않습니다. 그냥 시도하고 디버그하면 볼 수 있습니다. 내 견해로는 비록 나의 예와 비슷한 것을하는 것이 안전한 읽기를하는 것이 낫다. 응용 프로그램이 소스를 작성한 경우에도 일반적으로 소스를 신뢰해서는 안됩니다. –

+0

안전한 읽기 방법을 사용했고 양식이 열리지 않았습니다. 지금 무엇이 잘못 될 수 있습니까? – ChrisCreateBoss