如何将文件名与表或列表中的部分匹配进行比较



我目前正在尝试编码一个简单的工具,以轮询某些文件在晚上指定的时间到达服务器上的某些文件,以确认它们已经到达并记录了所有丢失的文件。他们将坐在此文件夹中大约。40分钟,然后通过脚本自动移出(我无法控制此)。

我的问题是:

如何将部分匹配的文件名与表格(我想在文件名中匹配唯一标识符(NUMBERNUMBER2)与用户可以通过Windows表单更新的预定义表上的文件名相匹配)。大概我想将字符串拆分,所以我已经拆分了 NUMBERNUMBER2,因此我可以比较这些字符串,看看它们是否包含在文件名中(二个 必须包含在文件名中匹配,订单很重要)。

文件名格式:

NCR_XR_D_NUMBER_NUMBER2

订单很重要,NCR_XR_D_8003_9611不等于NCR_XR_D_9611_8003

这就是我现在拥有的:

public static void CheckIfFilesExist()
    {
        // Put all file names in XR File directory into array.
        string[] array1 = Directory.GetFiles(@Properties.Settings.Default.XRFolderSavedLocation); 
        //this location is stored as a app setting, type: string, scope: User. This is tested working OK.
        // Print filenames into Console. (making sure the array is populating).
        Console.WriteLine("--- Files:---");
       foreach(string name in array1)
        {
            Console.WriteLine(name);
        } 
    }

如何创建类以存储文件路径和文件名的数字部分。在这里,我加入了数字,因为它使比较变得容易。

public class FileInfo
{
    public string FilePath { get; private set; }
    public string Numbers { get; private set; }
    public FileInfo(string filepath)
    {
        var fileName = Path.GetFileName(filepath);
        if (!fileName.StartsWith("NCR"))
        {
            throw new ArgumentException("Wrong type of file.");
        }
        FilePath = filepath;
        var nameParts = fileName.Split('_');
        Numbers = nameParts[3] + nameParts[4];
    }
}

然后您的功能变为:

    public static void CheckIfFilesExist()
    {
        var filesToFilter = Directory.GetFiles(@Properties.Settings.Default.XRFolderSavedLocation).Select(f => new FileInfo(f));
        var filterValues = GetFilterValues();
        var filteredFiles = filesToFilter.Where(f => filterValues.Contains(f.Numbers));
    }

GetFilterValues()返回您要寻找的值的字符串数组(例如"80039611")。

您只需在每个文件名上使用Split即可轻松解决此问题。类似:

public static void CheckIfFilesExist()
{
    string[] array1 = Directory.GetFiles(@Properties.Settings.Default.XRFolderSavedLocation); 
    foreach(string name in array1)
    {
        Console.WriteLine(name);
        if (Path.GetFileName(name).StartsWith("NCR"))
        {
             string[] splitted = name.Split('_');
             int number1 = int.Parse(splitted[3]);
             int number2 = int.Parse(splitted[4].Split('.')[0]);
        }
        Console.WriteLine(number1);
        Console.WriteLine(number2);
    } 
}

相关内容

  • 没有找到相关文章

最新更新