【问题标题】:Displaying files in a listbox in C# [closed]在 C# 的列表框中显示文件 [关闭]
【发布时间】:2012-05-16 16:47:50
【问题描述】:

我需要过滤掉整个计算机,只找到 .sto 文件。我希望这些文件显示在列表框中。我需要它们像这样显示:“text.sto”。我正在使用 Visual C# Express。我该怎么做?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 嗯,我研究了研究,但找不到方法,所以我才来这里......
  • 你的问题很广泛。你几乎要求一个完整的应用程序。您需要分解成几部分,逐一尝试,然后再回来寻求帮助。
  • 您可以使用DriveInfo.GetDrives 获取驱动器列表。然后,您可以使用Directory.EnumerateFile 扫描每个驱动器(这也将负责过滤)。
  • @EliteGamer 他们不是苛刻,而是乐于助人。研究与编写代码一样重要。 Google 是该研究的最佳工具 - 使用和滥用它。

标签: c# visual-c#-express-2010


【解决方案1】:

确保在代码文件的顶部有这个 using 指令:

using System.IO;

使用此方法获取目录:

string[] dirs = Directory.GetFiles(@"c:\", "*.sto", SearchOption.AllDirectories);

它需要一个允许您过滤结果的第二个参数。有关该方法的更多信息可以在这里找到:http://msdn.microsoft.com/en-us/library/ms143316.aspx

如果您不想为此使用内置的 .Net 函数(因为它可能会引发访问错误并且不提供任何结果),这里有一个问题的答案,显示了以不同的方式进行操作:https://stackoverflow.com/a/929418/184746

参考上述文章,这里有一个方法可以捕获并且不会给您添加为 *.sto 的过滤错误:

public static IEnumerable<string> GetFiles(string path)
{
    Queue<string> queue = new Queue<string>();
    queue.Enqueue(path);
    while (queue.Count > 0)
    {
        path = queue.Dequeue();
        try
        {
            foreach (string subDir in Directory.GetDirectories(path))
            {
                queue.Enqueue(subDir);
            }
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine(ex);
        }
        string[] files = null;
        try
        {
            files = (from f in Directory.GetFiles(path)
                     where f.EndsWith(".sto")
                     select f).ToArray();
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine(ex);
        }
        if (files != null)
        {
            foreach (string t in files)
            {
                yield return t;
            }
        }
    }
}

你可以这样使用它:

string[] dirs = GetFiles(@"c:\").ToArray();

之后,在设计器中创建一个列表框,遍历并添加项目

foreach(var f in dirs)
{
    listBox1.Items.Add(String.Format("\"{0}\"", f));
}

出于好奇,您在研究此问题时的搜索参数是什么?因为一个简单的谷歌搜索就能找到你所需要的一切:"get list of files C#"https://www.google.ca/search?sourceid=chrome&ie=UTF-8&q=get+list+of+files+C%23

【讨论】:

  • 我在此处的目录中遇到错误:Directory.GetFiles
  • 和 searchOption ......它说它在当前上下文中不存在。
  • 那么你没有正确的“使用”指令。
  • 我已为您更新了答案 - 但是,如果您在将鼠标悬停在错误上方时单击出现的框,VS2010 可以使用指令自动解决这些问题。
  • 我运行它然后得到:访问路径 'c:\$RECYCLE.BIN\S-1-5-20\' 被拒绝。 ???另外,如何在搜索中显示进度条?
【解决方案2】:

一种搜索sto文件的解决方案,但我不能说它有多快

string[] filePaths = Directory.GetFiles(@"c:\", 
                         "*.sto", 
                         SearchOption.AllDirectories);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    相关资源
    最近更新 更多