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

时间:2015-02-12 02:23:15

标签: c# csv file-rename batch-rename

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

例如:

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

}

2 个答案:

答案 0 :(得分:0)

根据我的理解,如果存在旧文件,您希望获得该文件的新值。要从列表中获取文件的新值,请尝试以下操作:

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

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

希望这有帮助。

答案 1 :(得分:0)

在我看来,更好的解决方案是使用普通的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获取解释。