Solved

C# File Copy

Posted on 2010-11-25
5
1,262 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
[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
  • 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

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

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

This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Monitoring a network: why having a policy is the best policy? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the enormous benefits of having a policy-based approach when monitoring medium and large networks. Software utilized in this v…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…

623 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