【问题标题】:Check if a file belong to one of folders检查文件是否属于文件夹之一
【发布时间】:2016-03-07 00:41:01
【问题描述】:

我有类似的目录

c:\test\data\product\delete\
c:\test\data\order\delete\
c:\test\data\quote\delete\
c:\temp\data\abc\delete\
c:\temp\data\pqr\delete\
c:\temp\data\xyz\delete\

等等……

所有delete 文件夹都包含一些文件。 问题是当我有一个文件时,例如:

c:\test\data\order\delete\order1.txt

我想检查它是否属于上面的任何目录。

Regex 可以吗,或者有没有更好的方法。

谢谢

【问题讨论】:

    标签: .net regex c#-4.0


    【解决方案1】:

    Regex 在这种情况下是不必要的。你可以像下面这样:

    List<string> foldersList = new List<string>
    {
        @"c:\test\data\product\delete\",
        @"c:\test\data\order\delete\",
        @"c:\test\data\quote\delete\",
        @"c:\temp\data\abc\delete\",
        @"c:\temp\data\pqr\delete\",
        @"c:\temp\data\xyz\delete\"
    };
    string file = @"c:\test\data\order\delete\order1.txt";
    
    bool isChild = foldersList.Any(f => file.StartsWith(f));
    

    以上代码是区分大小写的搜索。要搜索不区分大小写,您可以执行以下操作:

    bool isChild = foldersList.Any(
        f => file.IndexOf(f, StringComparison.OrdinalIgnoreCase) == 0);
    

    如果必须是Regex,你可以这样做:

    bool isChild = foldersList.Any(
        f => Regex.IsMatch(file, "^" + Regex.Escape(f), RegexOptions.IgnoreCase));
    

    ^ 表示在字符串开头匹配。

    【讨论】:

    • 谢谢小樱。对不起,我忘了提到没有文件夹是不固定的。但有一个像“c:\test\data*\delete”和“c:\temp\data*\delete”这样的模式
    • 您可以编辑您的问题并添加更多信息吗?我将根据您的需要编辑我的答案。
    猜你喜欢
    • 2016-09-30
    • 1970-01-01
    • 2010-11-08
    • 2011-02-12
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2022-01-23
    相关资源
    最近更新 更多