C# 在目录中按顺序给文件编号
我有一个目录,其中有一些文本文件。 我正在尝试以编程方式从01、02、03开始按顺序重命名文件。。。103等等 我在目录中有许多文件,但这些文件的顺序不正确。我想删除它当前的序列,从01开始,依此类推 目前,我写了这篇文章,但它缺少一些东西,而且工作不正常。你能给我指一下正确的方向吗 错误:当我运行此程序时,我遇到了一个无法找到文件的问题C# 在目录中按顺序给文件编号,c#,io,C#,Io,我有一个目录,其中有一些文本文件。 我正在尝试以编程方式从01、02、03开始按顺序重命名文件。。。103等等 我在目录中有许多文件,但这些文件的顺序不正确。我想删除它当前的序列,从01开始,依此类推 目前,我写了这篇文章,但它缺少一些东西,而且工作不正常。你能给我指一下正确的方向吗 错误:当我运行此程序时,我遇到了一个无法找到文件的问题 您的数字似乎被隔开了 您可以按”拆分文件名。。跳过第一条记录,然后用count更新文件名 大概 //Instead of .Remove() use bel
您的数字似乎被
隔开了
您可以按”拆分文件名。
。跳过第一条记录,然后用count更新文件名
大概
//Instead of .Remove() use below logic
System.IO.File.Move(f, string.Join(".", filenames[count -1].Split('.').Skip(1)));
首先,我们应该将文件重命名。我怀疑是否所有的*.txt文件都应该移动,可能我们应该使用一些模式:
这样我们就可以
var files = Directory
.EnumerateFiles(@"C:\Test-File", "*.txt")
.Where(file => Regex.IsMatch(Path.GetFileNameWithoutExtension(file), pattern))
.Select(file => new {
// C:\Test-File\25.New File - Copy (A4).txt
file = file,
// 25
index = int.Parse(Regex.Match(Path.GetFileName(file), @"^[0-9]+").Value),
// New File - Copy (A4).txt
name = Path
.GetFileName(file)
.Substring(Regex.Match(Path.GetFileName(file), @"^[0-9]+\.").Value.Length)
.Trim()
})
.OrderBy(item => item.index)
.Select((item, i) => new {
// C:\Test-File\25.New File - Copy (A4).txt
oldFile = item.file,
// C:\Test-File\07.New File - Copy (A4).txt
newFile = Path.Combine(
Path.GetDirectoryName(item.file),
$"{i + 1:d2}.{item.name}")
})
.ToArray();
如果我们想看看发生了什么:
foreach (var record in files)
Console.WriteLine($"{record.oldFile} -> {record.newFile}");
最后,循环并移动:
foreach (var record in files)
File.Move(record.oldFile, record.newFile);
Console.WriteLine("Job Complete!");
Console.ReadKey();
在重命名之前,你能给我们看一下你的文件名的格式吗。您的文件名是以数字开头的吗?它由
分隔吗?是的,模式如下:#。和###。(例01.一直持续到100 101。)@Prasadelkikikar不幸的是,“但它遗漏了一些东西,并且工作不正常”并不意味着什么。它是如何工作不正常的,好的和坏的是什么样子的。缺少什么?删除(0,2)
但实际上有些文件开头包含3个数字,结尾包含3个符号。我想从开头找到前2或3个数字,基本上删除它,然后在文件上添加从01开始的正确数字
foreach (var record in files)
Console.WriteLine($"{record.oldFile} -> {record.newFile}");
foreach (var record in files)
File.Move(record.oldFile, record.newFile);
Console.WriteLine("Job Complete!");
Console.ReadKey();