如何复制粘贴已经存在的文件
本文关键字:存在 文件 何复制 复制 | 更新日期: 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);