按目录顺序编号文件

时间:2019-09-10 08:51:02

标签: c# io

我有一个包含一些文本文件的目录。 我正在尝试以编程方式重命名文件,从01、02、03 ... 103开始,依此类推...

我的目录中有很多文件,但是这些文件的顺序不正确。我想删除其当前序列并从01开始,依此类推。

当前,我写了这个,但是它缺少一些东西,并且不能正常工作。你能指出我正确的方向吗?

enter image description here

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; }
         }

错误:运行此文件时,我找不到文件。

enter image description here

2 个答案:

答案 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();