【问题标题】:How to sort paths into two different categories - Is a file/Is a folder如何将路径分类为两个不同的类别 - 是文件/是文件夹
【发布时间】:2019-08-14 15:02:05
【问题描述】:

当我提到路径时,我指的是目录/文件路径(例如 - C:\Friends\noonelovesme.sql 或 C:\Friends)

我有一种方法会要求您选择一个文件或文件夹(您可以选择多个文件/文件夹)。然后它将您选择的所有文件/文件夹添加到 ListBox 中。

我希望能够对它们进行排序,以便我知道哪些是文件的路径,哪些是文件夹的路径,然后将它们添加到 string[] 中,这样我就可以进入程序的后续步骤。

基本上所有以文件名结尾的路径 (c:\dog.txt) 都将添加到名为 IsFile 的字符串 [] 中,所有以文件夹结尾的路径都将添加到名为 IsFolder 的字符串 [] 中.

我找到了这段代码(用于确定路径是文件还是文件夹):

FileAttributes attr = File.GetAttributes(@"c:\Temp");

if (attr.HasFlag(FileAttributes.Directory))
    MessageBox.Show("Its a directory");
else
    MessageBox.Show("Its a file");

但是好像不接受数组

【问题讨论】:

  • 所以在循环中调用它(见whileforforeach
  • 如果它不接受数组,你就不能遍历每个项目单独检查它们吗?
  • var attributeArray = pathArray.Select( p => File.GetAttributes(p) ).ToArray();
  • 没想到@Igor 。谢谢你
  • var markedPaths = paths.Select(p => new { p, HasDir = File.GetAttributes(p).HasFlag(FileAttributes.Directory) }).ToList(); var folders = markedPaths.Where(mp => mp.HasDir).Select(mp => mp.p).ToList(); var files = markedPaths.Where(mp => !mp.HasDir).Select(mp => mp.p).ToList(); 会不会更好,尽管这是 foreach 循环和使用 List.Add 可能更清晰、更高效的一种情况。

标签: c#


【解决方案1】:

将所有内容放在一个 foreach 循环中,并使用一个数组作为文件夹/文件的目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多