【发布时间】:2016-03-15 02:43:45
【问题描述】:
我想查找整个硬盘驱动器中的所有文件(.jpg、.png、.apk 和一些其他格式),但是这段代码不起作用..它所做的只是:例如,如果在我的“D:\”中驱动器我有:1)图像文件'i1',2)具有图像文件的文件夹'f1'和3)另一个具有图像文件的文件夹'f2'和'f2'包含具有图像文件的文件夹'f3'。它仅对 f1 和 f2 内的内容执行“calcFile()”,但不对 f3 和 i1 的内容执行所有其他分区。这里有什么问题?任何帮助表示赞赏。 我希望您了解正在发生的事情,因为这是我可以解释我的情况的最简单方法,如果需要更多信息,请告诉我。谢谢:)
public void calcDirectory(string token)
{
var validExtensions = new[]
{
".jpg", ".png", ".apk"
};
foreach (string s in Directory.GetLogicalDrives())
{
DriveInfo driveInfo = new DriveInfo(s);
if (driveInfo.IsReady)
{
foreach (string d in Directory.GetDirectories(s))
{
FileAttributes attrs1 = File.GetAttributes(d);
if (!attrs1.HasFlag(FileAttributes.ReparsePoint))
{
if (!attrs1.HasFlag(FileAttributes.System))
{
string[] allFilesInDir = Directory.GetFiles(d);
for (int i = 0; i < allFilesInDir.Length; i++)
{
string file = allFilesInDir[i];
string extension = Path.GetExtension(file);
if (validExtensions.Contains(extension))
{
string p = Path.GetFullPath(file);
FileAttributes attrs = File.GetAttributes(p);
if (attrs.HasFlag(FileAttributes.ReadOnly))
{
File.SetAttributes(p, attrs & ~FileAttributes.ReadOnly);
calcFile(file, token);
}
else
{
calcFile(file, token);
}
}
}
}
}
}
}
}
}
我在这里调用 calcDirectory()
public void start()
{
string token = File.ReadAllText(tokencalcalculated);
calcDirectory(token);
}
【问题讨论】:
-
stackoverflow.com/questions/9830069/… 的可能重复项,您可能必须指定 SearchOption Directory.GetFiles(d,SearchOption.AllDirectories)
-
这是不可能的,因为 GetFiles 的重载不允许这样做...我已经尝试过了
-
你也可以使用递归,看看这个。 stackoverflow.com/questions/929276/…
-
是的,但是如果我添加 Directory.GetFiles(d,SearchOption.AllDirectories) 这是不可能的,因为 GetFiles 的重载必须包含(路径,搜索模式,搜索选项)我不能只指定路径和搜索选项。 .那是我的看法..我错过了什么吗?
标签: c# file find hard-drive drive