2012-05-10 2 views
0

나는 목록 상자가 있으며 디렉토리 폴더에서로드 된 일부 파일이 있습니다.목록 상자에서 파일을 찾을 수 없습니다. C# win forms

코드는에 ListBox1에 파일을로드 :

private void Form1_Load(object sender, EventArgs e) 
     { 
      PopulateListBox(listbox1, @"C:\TestLoadFiles", "*.rtld"); 

     } 

private void PopulateListBox(ListBox lsb, string Folder, string FileType) 
     { 
      DirectoryInfo dinfo = new DirectoryInfo(Folder); 
      FileInfo[] Files = dinfo.GetFiles(FileType); 
      foreach (FileInfo file in Files) 
      { 
       lsb.Items.Add(file.Name); 
      } 
     } 

내가 읽고 형태로 라벨에 속성 값을 표시합니다. listBox1에로드 된 파일은 여기에 코드입니다 : 내가 폼이로드 된 후에 ListBox1에서 파일을 클릭하면

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e) 
{ 
    string path = (string)listBox1.SelectedItem; 
    DisplayFile(path); 
} 
private void DisplayFile(string path) 
{ 
    string xmldoc = File.ReadAllText(path); 

    using (XmlReader reader = XmlReader.Create(xmldoc)) 
    { 

     while (reader.MoveToNextAttribute()) 
     { 
      switch (reader.Name) 
      { 
      case "description": 
       if (!string.IsNullOrEmpty(reader.Value)) 
       label5.Text = reader.Value; // your label name 
       break; 
      case "sourceId": 
       if (!string.IsNullOrEmpty(reader.Value)) 
       label6.Text = reader.Value; // your label name 
       break; 
      // ... continue for each label 
      } 
     } 
    } 
} 

Problem:이 파일이 목록 상자에 폴더에서로드하지만 오류를 던지고 File not found in the directory.

이 문제를 어떻게 해결할 수 있습니까 ???

답변

1

전체 경로가 아닌 파일 이름 만 표시합니다. 당신은 다음과 같은 접근 방식을 따를 수 있습니다.

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      FileInfo file = (FileInfo)listbox1.SelectedItem; 
      DisplayFile(file.FullName); 
     } 

이 당신에게 전체 이름 (경로 파일 이름)을 얻어야한다 : 선이의 SelectedIndexChanged 이벤트에 다음

foreach (FileInfo file in Files) 
      { 
       lsb.Items.Add(file); 
      } 

는 다음을 수행해야하므로 PopulateListBox에서 대신 file.FullName의 file를 추가 파일을 찾을 수 없음 예외를 해결합니다

+0

난 그냥 화면을 파일 이름을 추가하고 파일을 읽고 싶어. – linguini

+0

@KarthikRANGARAJ, 나는 당신을 얻지 못했습니다. 이름 만 보여주고 전체 이름을 표시하여 파일을 표시하겠습니까? – Habib

+0

listBox1에서 폴더의'파일 이름 '만 표시하면됩니다. 클릭하면 해당 파일의 속성 값을 레이블로 읽어야합니다. – linguini

1

당신이 직면 한 문제는 목록 상자에서 전체 파일 경로와 이름이 아닌 파일 이름 만 지정하기 때문에 파일을 찾을 때 찾을 수 없다는 것입니다.

File.ReadAllText Method (String) 반면 FileInfo.Name Property

Gets the name of the file. 

에서 매개 변수로 path 걸린다.

private void PopulateListBox(ListBox lsb, string Folder, string FileType) 
     { 
      DirectoryInfo dinfo = new DirectoryInfo(Folder); 
      FileInfo[] Files = dinfo.GetFiles(FileType); 
      foreach (FileInfo file in Files) 
      { 
       lsb.Items.Add(file.FullName); 
      } 
     } 

편집이 : 그것은 당신이 원하는 모양 대신 당신이

lsb.Items.Add(file.FullName); 

그래서 당신의 방법 PopulateListBox이가되어야 귀하의 목록 상자에서 File.FullName을 추가해야 File.Name으로 추가되기 때문에입니다

0

전체 경로를 지정하지 않았습니다. 이 같은

시도 뭔가 :

DisplayFile(@"C:\TestLoadFiles\" + path) 
+0

당신의 방법을 사용했지만'using (XmlReader reader = XmlReader.Create (xmldoc))'에서 'path in illegal characters'로이 줄에 오류가 발생했습니다. – linguini

관련 문제