C# 获取c中.txt文件的最大数目#
我有一个包含以下文件的目录: 1.txt 2.txt 3.txt 如何获取.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"))
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();