我有一个包含一些文本文件的目录。 我正在尝试以编程方式重命名文件,从01、02、03 ... 103开始,依此类推...
我的目录中有很多文件,但是这些文件的顺序不正确。我想删除其当前序列并从01开始,依此类推。
当前,我写了这个,但是它缺少一些东西,并且不能正常工作。你能指出我正确的方向吗?
public class HeaderDetails
{
public int REG_ID { get; set; }
public int DataFlow_ID { get; set; }
public string RoleCode { get; set; }
public string MPID { get; set; }
}
错误:运行此文件时,我找不到文件。
答案 0 :(得分:1)
您的数字似乎用.
隔开。
您可以用'.'
分割文件名。跳过第一条记录,然后使用计数更新您的文件名。
类似
//Instead of .Remove() use below logic
System.IO.File.Move(f, string.Join(".", filenames[count -1].Split('.').Skip(1)));
答案 1 :(得分:1)
首先,我们应该获取要重命名的文件。我怀疑是否应该移动所有 * .txt文件,也许应该使用一些 pattern :
string pattern = @"^[0-9]{1,3}\..*Copy \([A-Z0-9]+\)$";
所以我们可以放
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();