项目不会出现在列表视图
问题描述:
我很抱歉如果我遗漏了一些简单的东西,我还在学习。这是我第一次尝试递归。这个程序应该做到以下几点,首先我打开我的FileBrowserDialog,然后列表视图在选定的文件夹内填充文件名。但是,当我选择文件夹时,它会填充列表视图,但我看不到任何名称,我的列表视图冻结。我知道它填充的原因是滚动条调整。这是我的代码:项目不会出现在列表视图
#region FileHandlers
void FolderSearch(string sFol)
{
try
{
foreach (string d in Directory.GetDirectories(sFol))
{
foreach (string f in Directory.GetFiles(d))
{
listView1.Items.Add(f);
}
FolderSearch(d);
}
}
catch (System.Exception excpt)
{
MessageBox.Show(excpt.Message);
}
}
public void ChooseFolder()
{
string pPath;
if(folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
pPath = folderBrowserDialog1.SelectedPath;
FolderSearch(pPath);
}
}
#endregion
void Button1Click(object sender, EventArgs e)
{
ChooseFolder();
}
答
您的代码跳过选定的文件夹,它只会选择的文件夹内得到的子文件夹的文件,因为你第一次调用GetDirectories
方法,如果你没有选择的文件夹或子文件夹内子文件夹没有文件,它不会得到任何文件。
试试这个
void FolderSearch(string sFol)
{
try
{
foreach (string f in Directory.GetFiles(sFol))
{
listView1.Items.Add(f);
}
foreach (string d in Directory.GetDirectories(sFol))
{
FolderSearch(d);
}
}
catch (System.Exception excpt)
{
MessageBox.Show(excpt.Message);
}
}
而且,如果你只想从System.IO.Path
类文件名使用GetFileName
方法。 listView1.Items.Add(Path.GetFileName(f));
+1
我实际上已经设法在解决这个问题之前解决它,但是我用你提到的类似方法做了。不过谢谢你的帮忙。你说的最后一点实际上是我的下一个任务,所以谢谢你! –
冻结背后的原因可能是所选文件夹的非常大的层次结构。尝试加载所选文件夹的文件名并查看是否面临相同的问题。注释行'FolderSearch(d);'看到它只填充选定文件夹的文件名的列表视图。 –
不幸的是,我试过这个以及使用一个测试文件夹,其中只有一对文件夹。似乎没有任何工作。 –
您的代码尝试在加载所选文件夹的文件之前加载所选文件夹及其文件的子目录。因此,如果子目录中没有任何文件,即使所选文件夹中有文件,也不会有任何项目添加到列表视图中。 –