Solved

C# copy file and recopy again

Posted on 2010-11-27
7
342 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

 

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 500 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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

726 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