我有一个目录。
在我所拥有的1个目录中,在这个场合有10个子文件夹。
在每个子文件夹中都有'n'个文件。
每个文件的文件名都遵循以下格式:
yyyymmddhhmissfff.jpg
其中:
yyyy =年份值 mm =月份值 dd =日值 hh =小时值 mi =分钟值 ss =第二个值 fff =毫秒值。
所以我想做什么,例如我正在搜索最接近20140316182212 * .jpg的文件名。我知道我可以这样做:
var files = from file in Directory.EnumerateFiles(searchPath, "*.jpg", SearchOption.AllDirectories);
然后我枚举结果以获得最接近的文件名。
但是有没有一种方法可以更有效地做到这一点?偶然。我不能依赖文件的创建时间戳,因为不能保证文件名与创建日期匹配。
答案 0 :(得分:2)
var file = "20140316182212.jpg";
var fileNum = Convert.ToInt64(Path.GetFileNameWithoutExtension(file));
var minDiff = Directory.EnumerateFiles(searchPath, "*.jpg", SearchOption.AllDirectories)
.Select(path => Convert.ToInt64(Path.GetFileNameWithoutExtension(path)))
.Min(num => Math.Abs(fileNum - num));
var result = Directory.EnumerateFiles(searchPath, "*.jpg", SearchOption.AllDirectories)
.First(path => Math.Abs(fileNum - Convert.ToInt64(Path.GetFileNameWithoutExtension(path))) == minDiff);
答案 1 :(得分:1)
试试这段代码:
string path = "C:\\YourFolderName\\";
string filePath = Directory.GetFiles(path, "*.JPG", SearchOption.AllDirectories).First(f => System.IO.Path.GetFileName(f).Contains("20140316182212"));