C# 复制具有相同名称的文件,但以编程方式向其添加副本数

C# 复制具有相同名称的文件,但以编程方式向其添加副本数,c#,.net,vb.net,file-io,C#,.net,Vb.net,File Io,我想复制在同一个地方的文件,如果已经存在,然后名称应与副本数量连接,就像我们在windows中手动操作一样 文件名:-MyPresentation.pptx到MyPresentation-复制1.pptx 我只找到了这个代码 FileIO.FileSystem.CopyFile(sourceFileName, desFileName) IO.File.Copy(sourceFileName, desFileName) 它只允许进行超写,并为下一个副本引发异常 如果文件已经存在,为什么不创建新文

我想复制在同一个地方的文件,如果已经存在,然后名称应与副本数量连接,就像我们在windows中手动操作一样

文件名:-MyPresentation.pptx到MyPresentation-复制1.pptx

我只找到了这个代码

FileIO.FileSystem.CopyFile(sourceFileName, desFileName)
IO.File.Copy(sourceFileName, desFileName)

它只允许进行超写,并为下一个副本引发异常

如果文件已经存在,为什么不创建新文件,并从源代码读取内容并将其写入新文件。

这里有一个简单的解决方案-一个迭代每个文件和用户计数器以命名文件的算法

    Dim sourceFileName As String = "C:\Users\itapi\Desktop\2a.png" 
    Dim NewFile As String = ""
    Dim count As Integer = 1

    While FileIO.FileSystem.FileExists(sourceFileName)

        NewFile = sourceFileName + "(" + count.ToString + ")"


    End While

    IO.File.Copy(sourceFileName, NewFile)

我并不真正了解自动方法,但我在前面已经实现了类似的功能,如果您删除一个文件,这将像windows一样工作。也许有帮助-

        string formatingString = " Copy ({0})";

        string originalDestinationName = "E:\\MyPresentation.txt";
        string sourceFileName = "C:\\Data\\MyPresentation.txt";


        int counter = 0;
        string actualDestinationPath =  originalDestinationName;
        string fileNameWithoutExt = Path.GetFileNameWithoutExtension(originalDestinationName);
        string actualDestinationDirectory = Path.GetDirectoryName(originalDestinationName);
        string ext = Path.GetExtension(originalDestinationName);
        //Check if the file exisits
        while (File.Exists(actualDestinationPath))
        {
             counter ++;
             actualDestinationPath = actualDestinationDirectory + fileNameWithoutExt + string.Format(formatingString,counter) + ext;

        }
        File.Copy(sourceFileName,  actualDestinationPath);

您需要检查目标目录中具有该命名模式的文件,然后找出要使用的正确名称windows@KhanEngineer然后它将遍历更少的文件。仍然应该有效。如果我能帮助你,我会很乐意接受我的回答:还有其他问题吗?不适合我,我需要自动方式,而你的答案也不适用