c# copy file reorder

the code below is work i use to copy mp3 file form sorce directory to destination directory ( some song is name in Thai language some mp3 player not accept so I change name of file to number)

how can I make a copy randomly copy every file from source but reorder

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
            {


                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

teeraAsked:
Who is Participating?
 
PryratesCommented:
ah... now I get it.
Its is not about coping, its about renaming files to get a random order based on the std. sorting of your os.
If a simple prefix to the filenames would fit your needs maybe this might do
private void RandomizeFilesInDirectory(string src_directory)
        {
            string[] directoryFiles = Directory.GetFiles(src_directory);
            int fileCnt = directoryFiles.Length;
            string numberFormat = GetNumberFormatString(fileCnt);

            // first determine random prefix number 
            string[] randomNumbers = new string[fileCnt];
            Random random = new Random();
            for (int i = 0; i < fileCnt; i++)
            {
                bool next = false;
                while (!next)
                {
                    string prefix = random.Next(1, fileCnt + 1).ToString(numberFormat);
                    if (!randomNumbers.Contains(prefix))
                    {
                        randomNumbers[i] = prefix;
                        next = true;
                    }
                }
            }

            // now we rename the files
            for (int i = 0; i < fileCnt; i++)
            {
                FileInfo fi = new FileInfo(directoryFiles[i]);
                string newFileName = "";
                if (fi.Name.Contains("$"))
                {
                    newFileName = fi.Name.Substring(fi.Name.IndexOf("$") + 1);
                }
                else
                {
                    newFileName = fi.Name;
                }
                newFileName = string.Concat(randomNumbers[i], "$", newFileName);
                fi.MoveTo(Path.Combine(fi.Directory.FullName, newFileName));
            }
        }

//helper method
        private string GetNumberFormatString(int ref_number)
        {
            if (ref_number < 10)
                return "0";
            if (ref_number < 100)
                return "00";
            if (ref_number < 1000)
                return "000";
            if (ref_number < 10000)
                return "0000";
            if (ref_number < 100000)
                return "00000";

            return "000000";
        }

Open in new window

0
 
PryratesCommented:
ordering as shown in the explorer is done by windows itself.
If you want to rename each file to archive a certain order this is another thing.

I think you need to be a little more specific about what you want to archive and how "ordering" is meant.
0
 
teeraAuthor Commented:
Hi Pryrates
 
      i have radio station and I have limit song that i can open due to copyright  my program is open song so i want to  rename the song to number so I can open with mp3 machine without problem but if i open every day with out reorder song it will not good  
    if program can reorder song randomly I will very hapy
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.