簡體   English   中英

如何比較表或列表中部分匹配的文件名

[英]How to compare filenames with partial match from a table or list

我目前正在嘗試編寫一個簡單的工具來輪詢某些在晚上指定時間到達服務器的文件,以確認它們已經到達並記錄所有丟失的文件。 他們將坐在此文件夾中大約。 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);
    } 

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM