如何复制粘贴已经存在的文件

本文关键字:存在 文件 何复制 复制 | 更新日期: 2023-09-27 18:11:50

我使用下面这行简单的代码复制粘贴一个文件:

File.Copy(filename, temp_file);

现在,如果一个文件已经存在,我想在复制到目标文件夹中保证不存在的一些名称之前重命名它,通过添加一些扩展名,如'copy1' 'copy2'....与Windows通过资源管理器进行复制粘贴时一样。如何程序化地做到这一点?

如何复制粘贴已经存在的文件

像这样:

    private static void MoveCopy(String source, String target) {
      // assuming that target directory exists
      if (!File.Exists(target))
        File.Copy(source, target);
      else
        for (int i = 1; ; ++i) {
          String name = Path.Combine(
            Path.GetDirectoryName(target),
            Path.GetFileNameWithoutExtension(target) + String.Format("(copy{0})", i) +
            Path.GetExtension(target));
          if (!File.Exists(name)) {
            File.Copy(source, name);
            break;
          }
        }
    }
...
  MoveCopy(filename, temp_file);

使用File.Exists方法检查文件是否存在

要重命名文件,可以尝试创建更多的循环来检查copy(1)是否存在

可以通过检查现有文件并为目标生成新名称来实现,直到它没有被占用,如下所示:

public static IEnumerable<string> FallbackPaths(string path)
{
    yield return path;
    var dir = Path.GetDirectoryName(path);
    var file = Path.GetFileNameWithoutExtension(path);
    var ext = Path.GetExtension(path);
    yield return Path.Combine(dir, file + " - Copy" + ext);
    for (var i = 2; ; i++)
    {
        yield return Path.Combine(dir, file + " - Copy " + i + ext);
    }
}
public static void SafeCopy(string src, string dest)
{
    foreach (var path in FallbackPaths(dest))
    {
        if (!File.Exists(path))
        {
            File.Copy(src, path);
            break;
        }
    }
}

注意这个函数可以给你IOException(对于文件已经存在的原因),如果同名的文件并发写入

(File.Exists(fileName) ? "File exists." : "File does not exist.")

我是这样做的:

int p = 0;
while (File.Exists(temp_file))
{
    temp_file = Path.GetTempPath() + @"temp_presentation" + p.ToString() + ".pptx";
    p++;
}
File.Copy(filename, temp_file);