check for duplicate filename when copying files in C#

那年仲夏 提交于 2020-01-24 01:46:06

问题


I want to copy files to a directory and rename to a particular format. but if the filename already exists, it should append {1}, {2} or {3} before the file extension.

My code renamed and copied the file and named it to my desired format say filename.pdf, when it checked for duplicate it renamed it to filename1.pdf. but when it tried copying again, it gave an error "file already exists" but i wanted it to have named it to filename02.pdf.

Pls can someone help me out.

Here is the code i have written so far.

    {
        string fileSource, filesToCopy, target, nextTarget;

        string sourceDir = @"C:\HCP_PDFs";            

        string destinationDir = @"C:\RenamedHcpPdfs";

        DirectoryInfo di = new DirectoryInfo(destinationDir);

        // create the directory if it dosnt exist

        if (!Directory.Exists(destinationDir))
        {
            Directory.CreateDirectory(destinationDir);
        }

        foreach (string myFiles in lstBoxFilenames.Items)
        {

            filesToCopy = myFiles;
            fileSource = Path.Combine(sourceDir, filesToCopy);         

            //Extract only HCP Name by splitting , removing file Extension and removing HCP ID 
            string hcp = filesToCopy.Split('_')[0];
            string hcpCd = filesToCopy.Split('_')[1];
            string hcpID = filesToCopy.Split('_')[2];
            string hcpName = String.Format((filesToCopy.Split('_')[3]).Replace(".pdf", ""));           

            //combine the HCP ID, HCP name and date                                                
            target = Path.Combine(destinationDir, hcp + "{" + hcpCd + "~" + hcpID + "}" + hcpName + "{2013_03_14}" + ".pdf");

            // if file exists in directory then rename and increment filename by 1
            int i = +1 ;

            nextTarget = Path.Combine(destinationDir, hcp + "{" + hcpCd + "~" + hcpID + "}" + hcpName + "{2013_03_14}" + i + ".pdf");

            if (File.Exists(target))
            {
                File.Copy(fileSource, nextTarget);
                break;
            }

            //if file does not exist, rename              
            else
            {
                File.Copy(fileSource, target);
            }          
        }            
    }

回答1:


Try this :

string target = Path.Combine(destinationDir, hcp + "{" + hcpCd + "~" + hcpID + "}" + hcpName + "{2013_03_14}.pdf");
while(File.Exists(target))
        {
            i++;
            target = Path.Combine(destinationDir, hcp + "{" + hcpCd + "~" + hcpID + "}" + hcpName + "{2013_03_14}" + i + ".pdf");

        }

File.Copy(fileSource, target);
break;



回答2:


Do this

while(File.Exists(target)) {i++;}

now declare your target path.



来源:https://stackoverflow.com/questions/15642748/check-for-duplicate-filename-when-copying-files-in-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!