我正在创建一个控制台应用程序,并且从特定文件夹中我只想获得具有特定扩展名的图像。
下面的代码我正在尝试,但它正在检索特定路径中的所有文件。
string[] extensions = { ".jpg", ".jpeg", ".png", ".gif", ".tif" };
FileInfo[] files = new DirectoryInfo(SourcePath).GetFiles("*.*", SearchOption.AllDirectories);
如何在FileInfo[]
上设置扩展程序?
更新了问题
答案
List<String> ImageFiles = Directory.GetFiles(SourcePath, "*.*",
SearchOption.AllDirectories)
.Where(file => new string[] { ".jpg", ".jpeg", ".png", ".gif", ".tif" }
.Contains(Path.GetExtension(file)))
.ToList();
List<FileInfo> files = new List<FileInfo>();
foreach (string filess in ImageFiles)
{
string replace = filess.Replace(@"\", "/");
files.Add(new FileInfo(replace.Split('/').Last()));
}
这里我怎么能摆脱每个循环,因为我只需要文件名而不是整个路径
答案 0 :(得分:3)
请使用以下代码。
List<String> ImageFiles = Directory.GetFiles(DirPath, "*.*",
SearchOption.AllDirectories)
.Where(file => new string[] { ".jpg", ".jpeg", ".png", ".gif", ".tif" }
.Contains(Path.GetExtension(file)))
.ToList();
List<FileInfo> images = new List<FileInfo>();
foreach (string fileName in ImageFiles)
{
images.Add(new FileInfo(fileName));
}
答案 1 :(得分:2)
尝试以下代码段。根据您的问题更新了答案
void Main()
{
List<string> ext = new List<string> { ".jpg", ".jpeg", ".png", ".gif", ".tif" };
FileInfo[] files = new DirectoryInfo(@"c:\temp").EnumerateFiles("*.*", SearchOption.AllDirectories)
.Where(path => ext.Contains(Path.GetExtension(path.Name)))
.Select(x => new FileInfo(x.FullName)).ToArray();
}
// Define other methods and classes here
答案 2 :(得分:2)
我认为最好使用Directory.EnumerateFiles而不是GetFiles。 EnumerateFiles方法不会等到加载所有文件。使用大量文件可以提高效率。
void Main()
{
string[] ext = new List<string> {".jpg", ".jpeg", ".png", ".gif", ".tif"};
FileInfo[] files = new DirectoryInfo(SourcePath).EnumerateFiles(@"C:\temp", "*.*", SearchOption.AllDirectories)
.Where(path => ext.Contains(Path.GetExtension(path.ToLower()));
}
更新:
回答更新的问题。
var ImageFilenames = Directory.EnumerateFiles(SourcePath, "*.*",
SearchOption.AllDirectories)
.Where(file => new string[] { ".jpg", ".jpeg", ".png", ".gif", ".tif" }
.Contains(Path.GetExtension(file)))
.Select(p => p.Substring(p.LastIndexOf('\\') + 1));