Solved

C# File Copy

Posted on 2010-11-25
5
1,203 Views
Last Modified: 2012-05-10
I have created a file copy function as follows

const string sourcepath = @"\\BANGALORECLUB\UPDATES\";
        readonly string destinationpath = Application.StartupPath;
        string[] filePaths;

filePaths = Directory.GetFiles(sourcepath, "*.*", SearchOption.AllDirectories);
            const int bufferSize = 32 * 1024;
            foreach (var filelist in filePaths)
            {
                CopyFile(filelist, destinationpath, bufferSize);  
            }



 public static void CopyFile(string source, string destination, int bufferSize)
           
        {
            using (FileStream outputFile = File.OpenWrite(destination))
            {
                using (FileStream inputFile = File.OpenRead(source))
                {
                    var buffer = new byte[bufferSize];
                    int bytesRead;
                    while ((bytesRead = inputFile.Read(buffer, 0, bufferSize)) != 0)
                    {
                        outputFile.Write(buffer, 0, bytesRead);
                    }
                }
            }
        }

Error:
I get access denied error in following line
using (FileStream outputFile = File.OpenWrite(destination))
This is local folder and there is no need of any permission. To ensure what I said is right, i coped the destination path and pasted in my windows explorer where i was able to open the folder and create any files. Not sure what is causing the error
0
Comment
Question by:GRChandrashekar
  • 2
  • 2
5 Comments
 
LVL 1

Expert Comment

by:beyazlale
ID: 34212059
0
 
LVL 16

Accepted Solution

by:
kris_per earned 500 total points
ID: 34212073

The 'destination' variable you pass in is directory path; you need to add the file name to it then use it in 'File.OpenWrite'. Corrected code below.
public static void CopyFile(string source, string destination, int bufferSize)

        {

            string destinationFilePath = destination + "\\" + System.IO.Path.GetFileName(source);

            using (FileStream outputFile = File.OpenWrite(destinationFilePath))

            {

                using (FileStream inputFile = File.OpenRead(source))

                {

                    var buffer = new byte[bufferSize];

                    int bytesRead;

                    while ((bytesRead = inputFile.Read(buffer, 0, bufferSize)) != 0)

                    {

                        outputFile.Write(buffer, 0, bytesRead);

                    }

                }

            }

        }

Open in new window

0
 
LVL 16

Expert Comment

by:kris_per
ID: 34212099

If you want to use .net's file copy method (instead of your CopyFile method), then the code would be:
...

foreach (var filelist in filePaths)

{

     string destinationFilePath = destinationpath + "\\" + System.IO.Path.GetFileName(filelist);



     // CopyFile(filelist, destinationpath, bufferSize);   



     System.IO.File.Copy(filelist,destinationFilePath,true);

}

Open in new window

0
 
LVL 13

Expert Comment

by:Naman Goel
ID: 34212154
string destinationpath = Application.StartupPath; must be a folder(Directory) and you are trying to access a folder as destination path for writing, that's why it is giving exception.

I had modified the above code in following way and it is working fine.
const string sourcepath = @"\\BANGALORECLUB\UPDATES\";

        readonly string destinationpath = Application.StartupPath;

        string[] filePaths;



filePaths = Directory.GetFiles(sourcepath, "*.*", SearchOption.AllDirectories);

            const int bufferSize = 32 * 1024;

            foreach (var filelist in filePaths)

            {

                CopyFile(filelist, destinationpath+Path.GetFileName(filelist), bufferSize);   

            }







  







 public static void CopyFile(string source, string destination, int bufferSize)

            

        {

            using (FileStream outputFile = File.OpenWrite(destination))

            {

                using (FileStream inputFile = File.OpenRead(source))

                {

                    var buffer = new byte[bufferSize];

                    int bytesRead;

                    while ((bytesRead = inputFile.Read(buffer, 0, bufferSize)) != 0)

                    {

                        outputFile.Write(buffer, 0, bytesRead);

                    }

                }

            }

        }



    }

}

Open in new window

0
 
LVL 13

Expert Comment

by:Naman Goel
ID: 34212176
sorry missed Path.Combine

attached is modified code


const string sourcepath = @"\\BANGALORECLUB\UPDATES\";

        readonly string destinationpath = Application.StartupPath;

        string[] filePaths;



filePaths = Directory.GetFiles(sourcepath, "*.*", SearchOption.AllDirectories);

            const int bufferSize = 32 * 1024;

            foreach (var filelist in filePaths)

            {

                CopyFile(filelist, Path.Combine(destinationpath,Path.GetFileName(filelist)), bufferSize);   

            }







  







 public static void CopyFile(string source, string destination, int bufferSize)

            

        {

            using (FileStream outputFile = File.OpenWrite(destination))

            {

                using (FileStream inputFile = File.OpenRead(source))

                {

                    var buffer = new byte[bufferSize];

                    int bytesRead;

                    while ((bytesRead = inputFile.Read(buffer, 0, bufferSize)) != 0)

                    {

                        outputFile.Write(buffer, 0, bytesRead);

                    }

                }

            }

        }

Open in new window

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Introduction Although it is an old technology, serial ports are still being used by many hardware manufacturers. If you develop applications in C#, Microsoft .NET framework has SerialPort class to communicate with the serial ports.  I needed to…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.
As a trusted technology advisor to your customers you are likely getting the daily question of, ‘should I put this in the cloud?’ As customer demands for cloud services increases, companies will see a shift from traditional buying patterns to new…

911 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now