0

我有一个列表框,它有一些从目录文件夹中加载的文件。

将文件加载到 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代码如下:

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:当我在加载表单后单击 listBox1 中的文件时,文件从文件夹加载到列表框中,但它抛出了一个错误File not found in the directory

我该如何解决这个问题???

4

3 回答 3

1

您面临的问题是,在列表框中您只指定文件名,而不是整个文件路径和名称,因此当它查找文件时,您找不到它。

来自FileInfo.Name 属性

Gets the name of the file.

File.ReadAllText 方法(字符串)作为path参数。

于 2012-05-10T04:50:58.973 回答
1

那是因为您要添加,File.Name而是应该File.FullName在列表框中添加

lsb.Items.Add(file.FullName);

所以你的方法 PopulateListBox 应该变成:

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

编辑: 看起来您只想显示文件名,而不是完整路径。您可以遵循以下方法。在 PopulateListBox 中,添加file 而不是 file.FullName 所以该行应该是

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

然后在 SelectedIndexChanged 事件中执行以下操作:

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

这应该为您提供全名(带路径的文件名)并将解决您的 File Not Found 异常

于 2012-05-10T04:51:11.250 回答
0

您没有指定完整路径。

尝试这样的事情:

 DisplayFile(@"C:\TestLoadFiles\" + path)
于 2012-05-10T04:51:59.850 回答