我需要搜索所有文件夹和子文件夹以找到图像文件。 我的问题是我无法在网络目录上搜索,并且使用此代码,它只能找到onde文件夹,而不是所有文件夹和子文件夹。有什么帮助吗?谢谢。 我所拥有的:
private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
List<string> filesList = new List<string>();
// Create the new DataTable to be used
tableWithPhotos = new DataTable();
tableWithPhotos.Columns.Add("Nome e formato do ficheiro (duplo clique para visualizar a imagem)");
tableWithPhotos.Columns.Add("Caminho ( pode ser copiado Ctrl+C )");
var diretorios = new List<string>() {@"C:\Users\myfolder\pictures"};
var extensoes = new List<string>() { "*.jpg", "*.bmp", "*.png", "*.tiff", "*.gif" };
foreach (string entryExtensions in extensoes)
{
foreach (string entryDirectory in diretorios)
{
filesList.AddRange(Directory.GetFiles(entryDirectory, entryExtensions, SearchOption.TopDirectoryOnly));
}
}
答案 0 :(得分:1)
您的直接问题是您为TopDirectoryOnly
指定了SearchOptions
。应该是AllDirectories
。
filesList.AddRange(Directory.GetFiles(entryDirectory, entryExtensions, SearchOption.AllDirectories));
要补充答案,我认为您可以简化流程。用一个目录创建一个字符串列表没有任何意义。我说的是这一行:
var diretorios = new List<string>() {@"C:\Users\myfolder\pictures"};
相反,请执行以下操作:
var topDir = @"C:\Users\myfolder\pictures";
var extensoes = new List<string>() { "*.jpg", "*.bmp", "*.png", "*.tiff", "*.gif" };
foreach (string ext in extensoes)
{
var files = Directory.EnumerateFiles(topDir, ext, SearchOption.AllDirectories);
// Add to list.
}
我鼓励使用EnumerateFiles()
而不是GetFiles()
,因为它更快,尤其是如果文件数量很多的时候。请参阅this答案。
答案 1 :(得分:0)
这是我需要做的:
filesList.AddRange(Directory.EnumerateFiles(allDir, ext, SearchOption.AllDirectories));