文件复制 - 如果名称冲突,请保留两个文件

时间:2011-09-15 12:05:59

标签: c# .net

File.Copy允许简单的文件复制。遇到重复的文件名时,File.Copy有第三个参数来确定原始文件是否被覆盖。

是否有内置的.Net功能,允许第三个选项重命名复制的文件,从而保留两个文件?例如,如果目标文件夹中已存在另一个readme.txt,则文件副本会自动将“readme.txt”重命名为“readme.topy.txt” - 类似于Windows资源管理器功能?

我意识到它可以被写入,但如果存在则不想重新发明轮子。

提前致谢。

3 个答案:

答案 0 :(得分:2)

不,这个功能并不是开箱即用的(谢天谢地,因为它会对它不应该有*的框架负责)所以如果你想要这个,那么你需要实现一个定制的溶液

* 应该采用哪种实现?附加“ - 复制”,附加“( n )”?它变得有问题而不是狡猾。

答案 1 :(得分:1)

您无法使用File.Copy进行一对一操作,但是您可以测试目标是否存在,然后测试MoveMove有两个参数,你可以基本上同时重命名。

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

请参阅Move documentation

修改

上面的更新代码。 @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);