user222427
user222427

Reputation:

C# copying multiple files with wildcards and keeping file names

I need to copy multiple files from a directory using a textfile that doesnt contain complete info.

NCR.txt:
Red

target directory has in it:
red1.txt
red3.txt
red44.txt

dest directory needs to have:
red1.txt
red3.txt
red44.txt

My code:

System.IO.Directory.CreateDirectory(@"C:\nPrep\" + textBox1.Text + "\\red");
        if (checkBox3.Checked)
        {
            String[] file_names = File.ReadAllLines(@"C:\NCR.txt");

            foreach (string file_name in file_names)
            {
                string[] files = Directory.GetFiles(textBox2.Text, file_name + "*.txt");
                foreach (string file in files)
                    System.IO.File.Copy(file, @"C:\nPrep\" + textBox1.Text + "\\red\\");
            }

        }

Upvotes: 9

Views: 37402

Answers (3)

user222427
user222427

Reputation:

All suggestions were great and thansk for all the advise but this was perfect:

if (checkBox3.Checked)
{
    string[] lines = File.ReadAllLines(@"C:\NCR.txt");

    foreach (string line in lines)
    {
        string[] files = Directory.GetFiles(textBox2.Text, line + "*.txt");
        foreach (string file in files)
        {
             FileInfo file_info = new FileInfo(file);
             File.Copy(file, @"C:\InPrep\" + textBox1.Text + "\\text\\" + file_info.Name);
        }
    }
}

Upvotes: 3

Austin Salonen
Austin Salonen

Reputation: 50215

//FileInfo & DirectoryInfo are in System.IO
//This is something you should be able to tweak to your specific needs.

static void CopyFiles(DirectoryInfo source, 
                      DirectoryInfo destination, 
                      bool overwrite, 
                      string searchPattern)
{
    FileInfo[] files = source.GetFiles(searchPattern);

    //this section is what's really important for your application.
    foreach (FileInfo file in files)
    {
        file.CopyTo(destination.FullName + "\\" + file.Name, overwrite);
    }
}

This version is more copy-paste ready:

static void Main(string[] args)
{
    DirectoryInfo src = new DirectoryInfo(@"C:\temp");
    DirectoryInfo dst = new DirectoryInfo(@"C:\temp3");

    /*
     * My example NCR.txt
     *     *.txt
     *     a.lbl
     */
    CopyFiles(src, dst, true);
}

static void CopyFiles(DirectoryInfo source, DirectoryInfo destination, bool overwrite)
{
    List<FileInfo> files = new List<FileInfo>();

    string[] fileNames = File.ReadAllLines("C:\\NCR.txt");

    foreach (string f in fileNames)
    {
        files.AddRange(source.GetFiles(f));
    }

    if (!destination.Exists)
        destination.Create();

    foreach (FileInfo file in files)
    {
        file.CopyTo(destination.FullName + @"\" + file.Name, overwrite);
    }
}

Upvotes: 25

SKG
SKG

Reputation: 1452

    string sourceDir = @"c:\";
    string destDir = @"c:\TestDir";
    var r = Directory.GetFiles(sourceDir, "red*.txt"); //Replace this part with your read from notepad file

    foreach (var s in r)
    {
        var sourceFile = new FileInfo(s);
        sourceFile.CopyTo(destDir + "\\" + s.Replace(sourceDir, string.Empty));
    }

Upvotes: 2

Related Questions