Mega Code Archive

 
Categories / C# / File Stream
 

Copy file from source to destination

#region License and Copyright /* -------------------------------------------------------------------------  * Dotnet Commons IO  *  *  * This library is free software; you can redistribute it and/or modify it   * under the terms of the GNU Lesser General Public License as published by   * the Free Software Foundation; either version 2.1 of the License, or   * (at your option) any later version.  *  * This library is distributed in the hope that it will be useful, but   * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY   * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License   * for more details.   *  * You should have received a copy of the GNU Lesser General Public License   * along with this library; if not, write to the   *   * Free Software Foundation, Inc.,   * 59 Temple Place,   * Suite 330,   * Boston,   * MA 02111-1307   * USA   *   * -------------------------------------------------------------------------  */ #endregion using System; using System.Collections; using System.Globalization; using System.IO; namespace Dotnet.Commons.IO {     class MainClass{         /// --------------------------------------------------------------------------         /// <summary>         ///  Copy file from source to destination. The directories up to          ///  <i>destination</i> will be created if they don't already exist.          /// </summary>                 /// <param name="source"></param>         /// <param name="destination"></param>         /// --------------------------------------------------------------------------         public static void CopyFile(string source, string destination)         {             FileInfo sourceFile = new FileInfo(source);                         FileInfo destFile = new FileInfo(destination);             CopyFile(sourceFile, destFile);         }     /// --------------------------------------------------------------------------     /// <summary>     ///  Copy file from source to destination. The directories up to      ///  <i>destination</i> will be created if they don't already exist.      ///  <i>destination</i> will be overwritten if it already exists.     ///  The copy will have the same file date as the original.     /// </summary>     /// <param name="source">An existing non-directory <see cref="FileInfo"/> to copy</param>     /// <param name="destination">A non-directory <see cref="FileInfo"/> to write bytes to</param>     /// <exception cref="IOException"/>     /// <exception cref="FileNotFoundException"/>     /// <remarks>Ported from Jakarta Commons IO FileUtils</remarks>     /// --------------------------------------------------------------------------     public static void CopyFile(FileInfo source,                                      FileInfo destination)     {       CopyFile(source, destination, true, true);     }     /// --------------------------------------------------------------------------     /// <summary>     ///  Copy file from source to destination. The directories up to      ///  <i>destination</i> will be created if they don't already exist.      /// </summary>     /// <param name="source">An existing non-directory <see cref="FileInfo"/> to copy</param>     /// <param name="destination">A non-directory <see cref="FileInfo"/> to write bytes to</param>     /// <param name="preserveFileDate">flag to indicate if the file date of          /// the copy should be the same as the original.</param>     /// <param name="overwriteIfExists">Flag to indicate if the file          /// is to be overwritten if already exists</param>     /// <exception cref="IOException"/>     /// <exception cref="FileNotFoundException"/>     /// <remarks>Ported from Jakarta Commons IO FileUtils</remarks>     /// --------------------------------------------------------------------------     public static void CopyFile(FileInfo source,                                      FileInfo destination,                                      bool preserveFileDate,                                      bool overwriteIfExists)     {              //check source exists       if (!source.Exists)        {         string message = "File '" + source.FullName + "' does not exist";         throw new FileNotFoundException(message);       }              //does destinations directory exist ?       if (destination.Directory != null && !destination.Directory.Exists)        {         destination.Directory.Create();       }       //make sure we can write to destination       if (destination.Exists && (destination.Attributes & FileAttributes.ReadOnly)== FileAttributes.ReadOnly)        {         String message = "Unable to open file '" + destination.FullName + "' for writing.";         throw new IOException(message);       }       //makes sure it is not the same file               if (source.DirectoryName.Equals(destination.DirectoryName))        {         String message = "Unable to write file '" + source + "' on itself.";         throw new IOException(message);       }                     File.Copy(source.FullName, destination.FullName, overwriteIfExists);                 destination.Refresh();              if (source.Length != destination.Length)        {         String message =           "Failed to copy full contents from "           + source.FullName           + " to "           + destination.FullName;         throw new IOException(message);       }                if (preserveFileDate)        {         //file copy should preserve file date         destination.LastWriteTime = source.LastWriteTime;               }     }         /// <summary>         /// Copy all the files in a directory into a destination folder. This operation performs         /// a deep copy, meaning it copies all the files in the subdirectory inside the source directory.         /// </summary>         /// <param name="sourcePath">source directory to copy from</param>         /// <param name="destinationPath">destination to copy to</param>         /// <exception cref="ArgumentException">If the source directory does not exist</exception>         /// <exception cref="IOException">if an I/O error occurs while copying the files</exception>         public static void CopyFiles(string sourcePath,                                      string destinationPath)         {             CopyFiles(new DirectoryInfo(sourcePath), new DirectoryInfo(destinationPath));         }         /// <summary>         /// Copy all the files in a directory into a destination folder. This operation performs         /// a deep copy, meaning it copies all the files in the subdirectory inside the source directory.         /// </summary>         /// <param name="source">source directory to copy from</param>         /// <param name="destination">destination to copy to</param>         /// <exception cref="ArgumentException">If the source directory does not exist</exception>         /// <exception cref="IOException">if an I/O error occurs while copying the files</exception>         public static void CopyFiles(DirectoryInfo source,                                     DirectoryInfo destination)         {             if (!source.Exists)                 throw new ArgumentException(string.Format("Source directory '{0}' does not exist", source));             if (!destination.Exists)                 destination.Create();             FileInfo[] sourceFiles = source.GetFiles();             foreach (FileInfo file in sourceFiles)             {                 file.CopyTo(destination.FullName + Path.DirectorySeparatorChar + file.Name);             }             DirectoryInfo[] subdirs = source.GetDirectories();             foreach (DirectoryInfo subdir in subdirs)             {                 DirectoryInfo destSubDir = Directory.CreateDirectory(destination.FullName + Path.DirectorySeparatorChar + subdir.Name);                 CopyFiles(subdir, destSubDir);             }         }    } }