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

时间:2015-09-09 14:43:37

标签: c#

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

File.Copy(filename, temp_file);

现在,如果一个文件已经存在,我想重命名它,然后通过添加一些名称扩展名来复制到目标文件夹中保证不存在的名称,例如' copy1' ' copy2' ....与通过资源管理器进行复制粘贴时的窗口相同。如何以编程方式执行此操作?

2 个答案:

答案 0 :(得分:3)

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

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(对于文件已存在的原因)。

答案 1 :(得分:0)

这就是我所做的:

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