Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

C# copy file and recopy again

Posted on 2010-11-27
7
Medium Priority
?
349 Views
Last Modified: 2012-05-10
the code below i try to copy form songs from sorce to destination foder  such as if sorce folder have 10 song and destination folder have 35 song I want to copy form source folder 35 song by recopy from begining song again until 35 song
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dlg = new FolderBrowserDialog();
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                sorrceTextbox.Text = dlg.SelectedPath;
            }


        }


        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dlg2 = new FolderBrowserDialog();
            if (dlg2.ShowDialog() == DialogResult.OK)
            {
                destTextbox.Text = dlg2.SelectedPath;
            }

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void startcopy_Click(object sender, EventArgs e)
        {

            
            if (String.IsNullOrEmpty(sorrceTextbox.Text) || String.IsNullOrEmpty(destTextbox.Text))
            {
                this.labelStart.Text = "Hello World";
            }
            else
            {
                int fileCount = Directory.GetFiles(destTextbox.Text).Length;
                this.labelStart.Text = fileCount.ToString() ;

                CopyFiles(sorrceTextbox.Text, destTextbox.Text);




            }



        }


        private void label1_Click(object sender, EventArgs e)
        {
            
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        
        public void CopyFiles(string sourceDir, string targetDir)
        {
            string[] sourceFiles = Directory.GetFiles(sourceDir);
            for (int i = 0; i < sourceFiles.Length; i++)
            {
                string sourceFile = sourceFiles[i];
                string targetFile = targetDir + "\\" + "1" + (i + 10).ToString().PadLeft(3, '0') + "1" + ".mp3";
                File.Copy(sourceFile, targetFile, true);
            }
        }


    }
}

Open in new window

0
Comment
Question by:teera
  • 4
  • 3
7 Comments
 
LVL 13

Expert Comment

by:Pryrates
ID: 34221512
sorry, but I am not sure if I get  your problem right.
Can you be more specific?

Do you want to sync the content of two folders?
Folder 1 has 10 files.
Folder 2 has 35 files.

After copy Folder 1 and 2 both have 45 files?
Or just folder 2 should contain 45 files after copy?
0
 

Author Comment

by:teera
ID: 34221663
hi   Pryrates

source            Folder 1 has 10 files.
target             Folder 2 has 35 files.


total is            60       folder will recopy until 35

it like a festival that have a song that compose for this festival and it mix with popular song but song that compose for festival will play many time

               
0
 
LVL 13

Expert Comment

by:Pryrates
ID: 34221695
what do you mean by "recopy until 35" ?

In your destination folder you have 35 files / items.
In your source folder you have 10 files / items.

You want in your destination folder to be as many copies of your source folder files as items are in your destination folder originally?
what to do:
a.) 35 destination, 10 in source => copy 10 files 35 times in your destination folder?
b.) 35 destination, 10 in source => 70 files should be in destination afterwards. 2 times all from source and 1st 5 from source to reach 35 copies.

Or did I still not get it?
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 

Author Comment

by:teera
ID: 34222103
Hi Pryrates

    if destination have 80  and source have 10 the total in destination is 160 toal  
    if the destination is 120 total will be 240
   
   it mean that sorce file will copy   1,2,3 ... 10  then 1 ,2 ... 10 .1,2 ..10 antil sorce destination was copy 120 file but change the name
0
 
LVL 13

Accepted Solution

by:
Pryrates earned 2000 total points
ID: 34222908
now I get it
how should the files be named that are copied into the destination directory?
the sample is pretty much straight forward...

I wrote two methods. One to be called directly and one to find a free filename if destination file already exists.

just call "DoubleFileAmount" directly. You have to pass the source and the destination directory as parameters.

Hope this is what you were looking for :)
 
//function to be called by other code
        private void DoubleFileAmount(string source_folder, string destination_folder)
        {
            if (!Directory.Exists(source_folder))
                throw new Exception("Sourcefolder does not exist");

            if (!Directory.Exists(destination_folder))
                throw new Exception("Destinationfolder does not exist");

            if(Directory.GetFiles(source_folder).Length == 0)
                throw new Exception("Sourcefolder is empty");

            if (Directory.GetFiles(destination_folder).Length == 0)
                throw new Exception("Destinationfolder is empty");


            List<string> sourceFiles =  Directory.GetFiles(source_folder).ToList();
            int destinationFileAmount = Directory.GetFiles(destination_folder).Length;

            int fullCopies = (int)Math.Floor((decimal)destinationFileAmount / (decimal)sourceFiles.Count);
            int fillUps = destinationFileAmount % sourceFiles.Count;

            for (int i = 1; i <= fullCopies; i++)
            {
                foreach (string sourceFile in sourceFiles)
                {
                    FileInfo fi = new FileInfo(sourceFile);
                    string destination = Path.Combine(destination_folder, fi.Name.Replace(fi.Extension, string.Concat("_", i.ToString("000"), fi.Extension)));
                    if (File.Exists(destination))
                        destination = FreeFileName(destination, i.ToString("000"));

                    File.Copy(sourceFile, destination);
                }
            }

            fullCopies++;
            for(int i = 1; i <= fillUps; i++)
            {
                FileInfo fi = new FileInfo(sourceFiles[i-1]);

                string destination = Path.Combine(destination_folder, fi.Name.Replace(fi.Extension, string.Concat("_", fullCopies.ToString("000"), fi.Extension)));
                if (File.Exists(destination))
                    destination = FreeFileName(destination, fullCopies.ToString("000"));

                File.Copy(fi.FullName, destination);
            }
        }

        //internal function
        private string FreeFileName(string source, string marker)
        { 
            string fileName = source;
            while (File.Exists(fileName))
            {
                FileInfo fi = new FileInfo(source);
                fileName = Path.Combine(fi.Directory.FullName, fi.Name.Replace(fi.Extension, string.Concat("_", marker, fi.Extension)));
            }
            return fileName;
        }

Open in new window

0
 

Author Closing Comment

by:teera
ID: 34223984
thank you
0
 
LVL 13

Expert Comment

by:Pryrates
ID: 34224425
you are welcome
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article introduced a TextBox that supports transparent background.   Introduction TextBox is the most widely used control component in GUI design. Most GUI controls do not support transparent background and more or less do not have the…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Integration Management Part 2
Enter Foreign and Special Characters Enter characters you can't find on a keyboard using its ASCII code ... and learn how to make a handy reference for yourself using Excel ~ Use these codes in any Windows application! ... whether it is a Micr…
Suggested Courses

578 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question