【发布时间】: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");
但是好像不接受数组
【问题讨论】:
-
所以在循环中调用它(见
while,for,foreach) -
如果它不接受数组,你就不能遍历每个项目单独检查它们吗?
-
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#