ファイル名と拡張子を抽出してから、新しい形式の名前で単純な 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 エクスプローラーの動作を模倣したい場合は、次のようにする必要があります。
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」はローカライズされているため、オペレーティング システムの英語以外のバージョンでは変更されることも考慮する必要があります。