C# 读取 CSV 文件以使用新名称重命名多个文件

C# Reading through CSV file to rename multiple files with new names

我想在 CSV 文件中使用旧名称和相应新名称的列表(CSV 的来源是 Excel sheet),以便重命名文件。显然用为每个案例指定的新名称替换旧名称。

例如:

Find what                                       Replace With
C:\Users\Documents\Pump Station.doc         C:\Users\Documents\Awesome Pump Station.doc              
C:\Users\Documents\Pump Selection.doc       C:\Users\Documents\Great Pump Selection.doc
C:\Users\Documents\Pump Sizing Calc.xlsx    C:\Users\Documents\Hectic Pump Sizing Calc.xlsx

我对编码还很陌生,我很难完成它。这是我到目前为止所拥有的。我什至不一定需要放置列表用户界面(它目前确实如此)。最后,我想遍历我的 CSV 文件中的行,检查指定的旧名称是否存在,如果存在,将其重命名为指定的新名称。

非常感谢提前提供的任何帮助,对于我在下面的代码中可能犯的任何菜鸟错误深表歉意。

public class OldNew
{
    public string oldFile { get; set; }
    public string newFile { get; set; }        
}

public static class OldNewService
{
    public static new List<OldNew>ReadFile(string filepath)
    {
        var lines = File.ReadAllLines(filepath);

        var data = from l in lines.Skip(1)
                   let split = l.Split(',')
                   select new OldNew
                   {
                       oldFile = split[0],
                       newFile = split[1],
                       };

    return data.ToList();
        }
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        DataContext = OldNewService.ReadFile(@"C:\Users\cch\Documents\Batch Edit\Lookup Table.csv");
    }
}

}

据我了解,如果旧文件存在,您想获取文件的新值。要从列表中获取文件的新值,请尝试以下操作:

    data.ForEach(d =>
            {
                if (!string.IsNullOrEmpty(d.oldFile))
                {
                   File.Move(d.oldFile, d.newFile);
                }
            });

如果存在新文件名,重命名旧文件名是否有意义?

希望对您有所帮助。

在我看来,更好的解决方案是使用普通的旧 foreach 而不是调用 ToList().ForEach()

var lines = File.ReadAllLines(filepath);

var data = from l in lines.Skip(1)
           let split = l.Split(',')
           select new OldNew
           {
               oldFile = split[0],
               newFile = split[1],
           };

foreach(var f in data)
{
     if (File.Exists(f.oldFile)
     {
         File.Move(f.oldFile, f.newFile);
     }
}

请参阅:http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx 了解说明。