【问题标题】:Select Files From Folder Depending on Name Convention根据名称约定从文件夹中选择文件
【发布时间】:2015-06-19 08:37:41
【问题描述】:

我在一个文件夹中收到一堆 XML 文件。

我想继续检查具有以下命名约定的文件:

sr-{first_id}-{second_id}-matchresults.xml

一收到就解析。

例如:

sr-40-24-standings.xml
sr-40-24-results.xml
sr-40-24-j7844-matchresults.xml

我应该选择那个:sr-40-24-j7844-matchresults.xml

这之后会发生什么帮助我根据 ASP Web 服务的命名约定来选择文件?

 Dim files As IO.FileInfo() = FolderName.GetFiles("*.xml")

【问题讨论】:

  • 这个问题和Classic ASP没有关系,请问可以去掉标签吗?

标签: c# xml vb.net fileinfo


【解决方案1】:
private bool IsValid(string value)
    {
        string regexString = "^sr-([a-z0-9]+)-([a-z0-9-]+)-matchresults.xml";
        return Regex.IsMatch(value, regexString);
    }

此方法将为您提供指定格式的文件 (sr-{first_id}-{second_id}-matchresults.xml)。 注意:您的 ID 可以包含字母数字字符,也可以包含“-”符号。如果您不想在 id 中使用该符号,那么代码将如下所示,

string regexString = "^sr-([a-z0-9]+)-([a-z0-9]+)-matchresults.xml";

【讨论】:

    【解决方案2】:

    你可以使用正则表达式:

    var pattern = new Regex(@"^sr-.............$");
    

    然后在 Directoy.GetFiles 上应用“过滤器”以仅检索与此模式匹配的文件:

    var files = Directory.GetFiles("path to files", "*.xml").Where(path => pattern.IsMatch(path)).ToList();
    

    【讨论】:

    • 我赞成你的回答,因为我喜欢过滤技术,但是你不能用 Directory.GetFiles("path to files", "sr-*.xml") 获得相同的效果吗?此外,正则表达式只匹配相同大小的文件名。
    • 嗨,所有文件都以 sr 开头,但重要的是其余的结构。请检查编辑
    • 你是对的也可以直接在Directory.GetFiles("path to files", "sr-*-matchresult.xml")甚至Directory.GetFiles("path to files", "sr-*-*-matchresult.xml")中过滤。如果需要更多控制(例如,确保以某种方式构造 ID),那么正则表达式可能是要走的路。
    • @sblandin:这不是重点吗?文件名采用特定格式。
    • @paul 原始帖子没有提供有关格式的太详细信息。我只是说用 * 你可以匹配任何文件名长度
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    相关资源
    最近更新 更多