我需要根据输入的文件编号列出图像文件。即使图像文件之前和/或之后可能具有相同的字符,我也只能找到具有该文件编号的图像文件。 因此,我试图基于文件号在文件夹结构中定位一些图像文件。 因此,如果文件号为'00441',我需要查找编号为以下文件的文件:
IM00441_000A.jpg
IM00441_205A.jpg
IM00441_110D.jpg
IM00441_A11.jpg
因此,如果每个图像文件都带有下划线(例如以下示例),那将不是问题,但是有些不带下划线。 并且有些文件编号带有后缀,例如“ 00441”和“ 00441A” 因此,除了上面列出的图像文件之外,我可能还具有:
IM00441A_000A.JPG
IM00441A_105A.JPG
IM00441A_110A.JPG
IM00441A_302A.JPG
因此,由于这些问题,我不能在下划线处打断,也不能使用StartsWith(如下面的代码),因为所有这些示例都以'00441'开头,而有些以'A'结尾。 这是我到目前为止的代码,但是由于我之前所说的而无法使用。
LocalFile = "IM" + FileNumber;
if (ValidateFilepath(di))
lstDocuments = di.GetFiles("*.jpg")
.Where(file => file.Name.ToUpperInvariant().StartsWith(LocalFile))
.Select(file => file.FullName).ToList(); // The ToUpperInvariant() makes the file name upper case, because the actual file names are not consistent.
答案 0 :(得分:0)
我建议为此使用Regular Expressions。
下面是一个示例(用00441
变量中的pattern
代替要搜索的文件名)
using System.Text.RegularExpressions;
// ...
var files = new List<string>
{
"IM00441_000A.jpg",
"IM00441_205A.jpg",
"IM00441_110D.jpg",
"IM00441_A11.jpg",
"IM00441A_000A.JPG",
"IM00441A_105A.JPG",
"IM00441A_110A.JPG",
"IM00441A_302A.JPG",
"IM00123_123A.jpg",
"IM00123A_123B.jpg",
"AIM00123_123C.jpg",
"IM00456_123A.jpg",
"IM00456A_123B.jpg",
"AIM00456_123C.jpg"
};
var pattern = @".+00441.*\.[jpg|JPG]";
foreach (var file in files)
{
if (Regex.IsMatch(file, pattern))
Console.WriteLine($"Found file: {file}");
}
// Output:
// Found file: IM00441_000A.jpg
// Found file: IM00441_205A.jpg
// Found file: IM00441_110D.jpg
// Found file: IM00441_A11.jpg
// Found file: IM00441A_000A.JPG
// Found file: IM00441A_105A.JPG
// Found file: IM00441A_110A.JPG
// Found file: IM00441A_302A.JPG