您应该提取文件名和扩展名,然后使用新的格式化名称执行简单的 File.Copy
string fileName = "tips.txt";
string file = Path.GetFileNameWithoutExtension(fileName);
string ext = Path.GetExtension(fileName);
File.Copy(fileName, string.Format("{0} - Copy{1}", file, ext);
如果你有一个完整的路径可以复制,事情会变得有点复杂
string fileName = "C:\\test\\tips.txt";
string path = Path.GetDirectoryName(fileName);
string file = Path.GetFileNameWithoutExtension(fileName);
string ext = Path.GetExtension(fileName);
File.Copy(fileName, Path.Combine(path, string.Format("{0} - Copy{1}", file, ext));
但如果你真的想模仿 Windows Explorer 的行为,我们应该这样做:
string fileName = "C:\\test\\tips.txt";
string path = Path.GetDirectoryName(fileName);
string file = Path.GetFileNameWithoutExtension(fileName);
string ext = Path.GetExtension(fileName);
if(file.EndsWith(" - Copy")) file = file.Remove(0, file.Length - 7);
string destFile = Path.Combine(path, string.Format("{0} - Copy{1}", file, ext));
int num = 2;
while(File.Exists(destFile))
{
destFile = Path.Combine(path, string.Format("{0} - Copy ({1}){2}", file, num, ext));
num++;
}
File.Copy(fileName, destFile);
如果 Windows 资源管理器复制以“-Copy”结尾的文件,它会向目标文件添加一个渐进式编号,而不是另一个“-Copy”。
您还应该考虑到字符串“Copy”是本地化的,因此它在非英语版本的操作系统中会发生变化。