模拟Windows默认文件重命名行为的.Net方法

时间:2014-03-12 09:33:27

标签: c# .net windows file rename

在Windows资源管理器中,如果您复制文件并且文件名已经存在并且您选择不覆盖该文件,则Windows资源管理器将使用特定的文件重命名算法,即它会尝试附加类似" copy&#34的内容;,如果此文件存在,它会在括号中附加一个数字,然后递增,以防这些文件名也已被占用。请注意,这是算法的简化版本。实际上它更复杂。

由于我不想对此行为进行反向工程,是否有可用的c#.Net-Api可以在复制或创建文件时直接访问此行为?

2 个答案:

答案 0 :(得分:2)

没有

主要是因为这绝对不是Windows标准行为,而只是在资源管理器中完成(即这是特定的程序)。

答案 1 :(得分:1)

正如@TomTom所说,没有,但Windows资源管理器的行为很容易重现:

鉴于

var source = @"C:\Temp\Source.txt";
var targetFolder = @"C:\Temp\";

然后,

var targetName = Path.GetFileName(source);
var target = Path.Combine(targetFolder, targetName);
while (File.Exists(target)) {
    targetName = "Copy of "+ targetName;
    var target = Path.Combine(targetFolder, targetName);
}

File.Copy(source, target);

或者你可以像Mac一样使用Mac:

var targetName = Path.GetFileName(source);
for (int i = 0; i < MAX_TRIES; i++) {
    var idx = (i==0)?"":(" ("+i.ToString()+")");
    var target = Path.Combine(targetFolder, targetName+idx);
    if (!File.Exists(target)) break;
}
File.Copy(source, target);