File.Copy允许简单的文件复制。遇到重复的文件名时,File.Copy有第三个参数来确定原始文件是否被覆盖。
是否有内置的.Net功能,允许第三个选项重命名复制的文件,从而保留两个文件?例如,如果目标文件夹中已存在另一个readme.txt,则文件副本会自动将“readme.txt”重命名为“readme.topy.txt” - 类似于Windows资源管理器功能?
我意识到它可以被写入,但如果存在则不想重新发明轮子。
提前致谢。
答案 0 :(得分:2)
不,这个功能并不是开箱即用的(谢天谢地,因为它会对它不应该有*的框架负责)所以如果你想要这个,那么你需要实现一个定制的溶液
* 应该采用哪种实现?附加“ - 复制”,附加“( n )”?它变得有问题而不是狡猾。
答案 1 :(得分:1)
您无法使用File.Copy
进行一对一操作,但是您可以测试目标是否存在,然后测试Move
。
Move
有两个参数,你可以基本上同时重命名。
if File.Exists(destinationPath) {
File.Move(source, destinationPathRenamed);
} else {
try {
File.Copy(source, destinationPath);
} catch (IOException ex) {
// destinationPath file already exists
File.Move(source, destinationPathRenamed);
}
}
修改强>
上面的更新代码。 @xanatos对原子操作提出了一个很好的观点。我没有假设是否有其他进程访问文件。
请注意,在操作开始之前,我没有为要删除的源文件添加其他错误处理。
答案 2 :(得分:0)
var destinationPath = c:\temp\archive.txt;
if(File.Exists(destinationPath))
destinationPath = string.Format("c:\temp\archive.{0}.txt", DateTime.Now.ToString("yyyyMMddHHmmffff"));
File.Move(filePath,destinationPath);