Question

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);
            }          
        }            
    }
Was it helpful?

Solution

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;

OTHER TIPS

Do this

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

now declare your target path.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top