列表框 C# win 表单中的“找不到文件”错误

本文关键字:文件 找不到 找不到文件 错误 win 表单 列表 | 更新日期: 2023-09-27 18:33:53

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

将文件加载到 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

如何解决此问题???

列表框 C# win 表单中的“找不到文件”错误

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

lsb.Items.Add(file.FullName);

所以你的方法填充列表框应该变成:

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

编辑:看起来您只想显示文件名,而不是完整路径。您可以遵循以下方法。在"填充列表框"中,添加file而不是文件。全名,所以该行应该是

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

这应该会为您提供全名(带有路径的文件名),并将解决"找不到文件"的异常

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

从 FileInfo.Name 房产

Gets the name of the file.

而File.ReadAllText Method (String) 将path作为参数。

您没有指定完整路径。

尝试这样的事情:

 DisplayFile(@"C:'TestLoadFiles'" + path)