Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取c中.txt文件的最大数目#_C# - Fatal编程技术网

C# 获取c中.txt文件的最大数目#

C# 获取c中.txt文件的最大数目#,c#,C#,我有一个包含以下文件的目录: 1.txt 2.txt 3.txt 如何获取.txt文件名目录中的最大数字 这是我试过的 DirectoryInfo d = new DirectoryInfo(@"C:\Users\Public\BotMakerLoggerSite\Logs\" + token + @"\"); int highest = 0; foreach (var file in d.GetFiles(" *.txt"))

我有一个包含以下文件的目录: 1.txt 2.txt 3.txt

如何获取.txt文件名目录中的最大数字

这是我试过的

  DirectoryInfo d = new DirectoryInfo(@"C:\Users\Public\BotMakerLoggerSite\Logs\" + token + @"\");
            int highest = 0;
                 foreach (var file in d.GetFiles(" *.txt"))
                 {
                     string a = file.Name.Replace(".txt", "");
                     int b = Convert.ToInt32(a);
                     if (b >= highest)
                     {
                         highest = b;
                     }

               }
            try
            {
                t = File.ReadAllText(@"C:\Users\Public\BotMakerLoggerSite\Logs\" + token + @"\" + highest + ".txt");

            }
            catch
            {
                Console.WriteLine("Error");
            }
            File.WriteAllText(@"C:\Users\Public\BotMakerLoggerSite\Logs\" + token + @"\" + highest + ".txt", t + Environment.NewLine + e.Source + " | " + DateTime.Now + " | " + e.Severity + " : " + e.Message + "=" + highest);

以下是您可以尝试实现这一目标的一些步骤:

  • 定义一个带值的整数变量
  • IEnumerable
    格式获取目录中的文件名:
  • 循环遍历文件名,并为每个文件获取不带扩展名的名称:
  • 尝试将文件名解析为整数:
  • 如果解析成功,并且结果数大于前面声明的整数变量,则将整数变量设置为该值
  • 当循环完成时,整数变量将保存所需的值或
    Int32.MinValue
    (如果没有文件名能够解析为整数)

  • 这应该会有所帮助。它使用正则表达式提取文件名的数字部分;在本例中,它将在文件的开头查找数字,这似乎是您想要的。如果是类似“my51st.txt”的内容,则不会返回51。正则表达式部分如下所示:

    Match m = Regex.Match(name, "\\d+");
    
    其中d+表示在字符串开头提取一个或多个数字

    代码如下:

            var fileNames = Directory.GetFiles(targetDirectory);
            var numberList = new List<int>();
            int number;
    
            foreach (var name in fileNames) {
                Match m = Regex.Match(name, "\\d+"); // this gets the number at beginning of filename
                var isNumber = Int32.TryParse(m.ToString(), out number);
    
                if(isNumber)
                    numberList.Add(number);
            }
    
            var highest = numberList.OrderByDescending(x => x).FirstOrDefault();
    

    我将采用这种方法:

    Func<string, int?> tryParse = x =>
    {
        int r;
        if (int.TryParse(x, out r))
        {
            return r;
        }
        return null;
    };
    
    int highest =
        new DirectoryInfo(@"C:\Users\Public\BotMakerLoggerSite\Logs\" + token + @"\")
            .GetFiles()
            .Select(x => Path.GetFileNameWithoutExtension(x.Name))
            .Select(x => tryParse(x))
            .Where(x => x.HasValue)
            .Select(x => x.Value)
            .DefaultIfEmpty(0)
            .Max();
    
    Func tryParse=x=>
    {
    INTR;
    if(内锥巴色(x,外r))
    {
    返回r;
    }
    返回null;
    };
    整数最高=
    新目录信息(@“C:\Users\Public\BotMakerLoggerSite\Logs\“+token+@“\”)
    .GetFiles()
    .Select(x=>Path.GetFileNameWithoutExtension(x.Name))
    .选择(x=>tryParse(x))
    .其中(x=>x.HasValue)
    .选择(x=>x.Value)
    .DefaultIfEmpty(0)
    .Max();
    
    您尝试过做什么?它怎么不起作用呢?@UnholySheep我正在尝试获取目录中的所有文件,并将它们的名称转换为int,然后比较它们。我的目标是,如果我在目录中混合了1-100个数字作为txt文件名的数字,我希望获得最高的一个。@loganrise然后向我们展示你的尝试,我们会告诉你iti有什么问题我用itWorks更新了我的帖子!非常感谢。太棒了!刚刚添加了一个编辑,以反映C#7中新的输出变量特性。
    Func<string, int?> tryParse = x =>
    {
        int r;
        if (int.TryParse(x, out r))
        {
            return r;
        }
        return null;
    };
    
    int highest =
        new DirectoryInfo(@"C:\Users\Public\BotMakerLoggerSite\Logs\" + token + @"\")
            .GetFiles()
            .Select(x => Path.GetFileNameWithoutExtension(x.Name))
            .Select(x => tryParse(x))
            .Where(x => x.HasValue)
            .Select(x => x.Value)
            .DefaultIfEmpty(0)
            .Max();