需要根据输入文件号查找确切的文件名列表

时间:2019-05-13 19:53:08

标签: c#

我需要根据输入的文件编号列出图像文件。即使图像文件之前和/或之后可能具有相同的字符,我也只能找到具有该文件编号的图像文件。 因此,我试图基于文件号在文件夹结构中定位一些图像文件。 因此,如果文件号为'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.

1 个答案:

答案 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