c# - 从我的驱动器获取文件在 C# 中返回 0
问题描述
我只是 VS、C# 和 XAML 的新手。我正在构建这个项目,我想在我的D;\
驱动器中显示所有图像。所以我实际上是从这个问题中得到了这段代码,幸运的是我让它工作起来没有任何困难。我可以告诉代码正在运行,因为我的应用程序现在需要大约 2 分钟才能启动,因此由于搜索到的图像而被延迟
public static IEnumerable<string> GetDirectoryFiles(string rootPath, string patternMatch, SearchOption searchOption)
{
var foundFiles = Enumerable.Empty<string>();
if (searchOption == SearchOption.AllDirectories)
{
try
{
IEnumerable<string> subDirs = Directory.EnumerateDirectories(rootPath);
foreach (string dir in subDirs)
{
foundFiles = foundFiles.Concat(GetDirectoryFiles(dir, patternMatch, searchOption));
}
}
catch (UnauthorizedAccessException) { }
catch (PathTooLongException) { }
}
try
{
foundFiles = foundFiles.Concat(Directory.EnumerateFiles(rootPath, patternMatch));
}
catch (UnauthorizedAccessException) { }
return foundFiles;
}
我用这行代码调用函数GetDirectoryFiles
string[] filePaths = {};
string[] extObj = { "*.JPG", ".JPEG", ".PNG", ".GIF", ".BMP*.jpg", ".jpeg", ".png", ".gif", ".bmp" };
foreach(var ext in extObj)
filePaths.Concat(GetDirectoryFiles(@"D:\", ext, SearchOption.AllDirectories));
System.Diagnostics.Debug.WriteLine(filePaths.Length);
但是我有一个问题......当filePaths.Length
输出时我得到0
. 我实际上不知道为什么,但我知道我的驱动器中至少有 4000.jpg
张图像D:\
,所以我不应该得到 0。
简而言之,我的问题是:我想在我的驱动器中加载所有图像,不包括参考我之前的问题返回和错误D:\
的路径UnauthorizedAccessException
PathTooLongException
解决方案
扩展方法返回一个新的Concat
可枚举对象,但您没有对它做任何事情。您需要将其分配回filePaths
.
首先,更改文件路径的类型。如果将其保留为数组,则每次都必须不断对其进行具体化(例如调用ToArray
),这很昂贵。
IEnumerable<string> filePaths = Enumerable.Empty<string>();
然后,将每个新的可枚举分配回 filePaths。
foreach (var ext in extObj)
filePaths = filePaths.Concat(GetDirectoryFiles(@"D:\", ext, SearchOption.AllDirectories));
最后, filePaths 是IEnumerable<string>
你必须使用Count()
而不是Length
.
System.Diagnostics.Debug.WriteLine(filePaths.Count());
...或者只是具体化它...
string[] finalFilePaths = filePaths.ToArray();
System.Diagnostics.Debug.WriteLine(finalFilePaths.Length);
推荐阅读
- python - 根据 pandas 中的数据框格式化输出文本文件
- javascript - 如何使用复制按钮复制文本中的变量?
- mysql - 即使在执行存储过程“操作数应包含一列”之后也会出现无法理解的错误
- ignite - 如何最好地在 Apache ignite 缓存上持续更新有序数据
- python - 在 ml 中调用 fit() 后训练的数据存储在哪里?
- django - 如何从表中以一个月天为表头的模型中检索数据?
- c++ - 在 C++ 中,如何根据运行时条件构造引用不同 istream 对象的对象?
- javascript - 如何在 2d JS/HTML 游戏中添加碰撞?
- c# - 在 WinForms 窗口中而不是从浏览器中打开 url 站点
- tensorflow - 在没有 GPU 的情况下运行训练时应该使用哪种分布式策略