我想在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");
}
}
}
答案 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获取解释。