列表框 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
。
如何解决此问题???
那是因为您要添加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)