C#查找包含字符串

时间:2018-01-30 21:55:24

标签: linq

编辑 - 修改了帖子的标题,使其与问题更相关。

我的文件夹可能包含也可能不包含以" REV"开头的子文件夹。如果有子文件夹以" REV"开头。它们后跟一个用前导零填充的整数值。 (即:REV010或REV003)。

我的目标是:

  1. 找到测试文件夹(C:\ temp \ TEST \ REV003)
  2. 读取文件夹的字符串名称并解析其整数值
  3. 将整数添加到整数列表中。找到最大整数值
  4. 递增最大整数值
  5. 创建一个以" REV"开头的新字符串文件夹名称。并用新的int值填充
  6. 当我调试代码(下面)时,似乎找不到REV003文件夹(该文件夹肯定存在于路径中)。

    查找文件夹时我的LINQ语句出了什么问题?

    此外,如果有一个更简单的程序来实现同样的事情 - 我绝对是开放的!谢谢!

            int nextRev = 0;
    
            List<int> listOfRevs = new List<int>();
    
            IEnumerable<string> revFolders = Directory.GetDirectories(destDirName, "*REV*", SearchOption.AllDirectories).Where(f => f.StartsWith("REV"));
    
            foreach (var rev in revFolders)
            {
                Console.WriteLine(int.Parse(rev.Replace("REV", "")));
                listOfRevs.Add(int.Parse(rev.Replace("REV", "")));
            }
    
            if (listOfRevs.Count > 0)
            {
                nextRev = listOfRevs.Max();
                Console.WriteLine(nextRev);
                nextRev++;
            }
    
            revFolder = "REV" + nextRev.ToString("000");
    
            Console.WriteLine("New Folder: " + revFolder);
    

    **更新** 感谢NetMage,问题得到解决,但我仍然有一些错误。这是工作代码:

        string revf = "";
        int nextRev = 0;
        List<int> listOfRevs = new List<int>();
    
        IEnumerable<string> revFolders = Directory.GetDirectories(destDirName, "REV*", SearchOption.AllDirectories);
    
        foreach (var rev in revFolders)
        {
            if (rev.Contains("REV"))
            {
                revf = rev.Split('\\').Last();
                listOfRevs.Add(int.Parse(revf.Replace("REV", "")));
            }
        }
    
        if (listOfRevs.Count > 0)
        {
            nextRev = listOfRevs.Max();
            nextRev++;
        }
    
        revFolder = "REV" + nextRev.ToString("000");
    

1 个答案:

答案 0 :(得分:1)

将目录搜索更改为

IEnumerable<string> revFolders = Directory.GetDirectories(destDirName, "REV*", SearchOption.AllDirectories);

根据此结果,您将更改最大查找代码 - 我将使用LINQ:

var maxREV = Directory.GetDirectories(destDirName, $"REV*", SearchOption.AllDirectories)
                    .Select(d => Int32.TryParse(Path.GetFileName(d).Substring(3), out int num) ? num : (int?)null)
                    .Where(n => n.HasValue)
                    .Select(n => n.Value)
                    .Max();

var revFolder = "REV" + (maxREV+1).ToString("000");

Console.WriteLine("New Folder: " + revFolder);

我进行了一些错误处理,以跳过“REV”之后没有整数的文件。