在许多文件夹中搜索最近的文件名

时间:2014-03-11 16:21:11

标签: c# linq io

我有一个目录。

在我所拥有的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);

然后我枚举结果以获得最接近的文件名。

但是有没有一种方法可以更有效地做到这一点?偶然。我不能依赖文件的创建时间戳,因为不能保证文件名与创建日期匹配。

2 个答案:

答案 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"));