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 了解说明。
我想在 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 了解说明。