Example #1
0
        /// <summary>
        /// Copies a directory to another location
        /// </summary>
        /// <param name="Source">Source directory</param>
        /// <param name="Destination">Destination directory</param>
        /// <param name="Recursive">Should the copy be recursive</param>
        /// <param name="Options">Options used in copying</param>
        /// <returns>The DirectoryInfo for the destination info</returns>
        public static DirectoryInfo CopyTo(this DirectoryInfo Source, string Destination, bool Recursive = true, CopyOptions Options = CopyOptions.CopyAlways)
        {
            if (Source == null)
            {
                throw new ArgumentNullException("Source");
            }
            if (!Source.Exists)
            {
                throw new DirectoryNotFoundException("Source directory " + Source.FullName + " not found.");
            }
            if (string.IsNullOrEmpty(Destination))
            {
                throw new ArgumentNullException("Destination");
            }
            DirectoryInfo DestinationInfo = new DirectoryInfo(Destination);

            DestinationInfo.Create();
            foreach (FileInfo TempFile in Source.EnumerateFiles())
            {
                if (Options == CopyOptions.CopyAlways)
                {
                    TempFile.CopyTo(Path.Combine(DestinationInfo.FullName, TempFile.Name), true);
                }
                else if (Options == CopyOptions.CopyIfNewer)
                {
                    if (File.Exists(Path.Combine(DestinationInfo.FullName, TempFile.Name)))
                    {
                        FileInfo FileInfo = new FileInfo(Path.Combine(DestinationInfo.FullName, TempFile.Name));
                        if (FileInfo.LastWriteTime.CompareTo(TempFile.LastWriteTime) < 0)
                        {
                            TempFile.CopyTo(Path.Combine(DestinationInfo.FullName, TempFile.Name), true);
                        }
                    }
                    else
                    {
                        TempFile.CopyTo(Path.Combine(DestinationInfo.FullName, TempFile.Name), true);
                    }
                }
                else if (Options == CopyOptions.DoNotOverwrite)
                {
                    TempFile.CopyTo(Path.Combine(DestinationInfo.FullName, TempFile.Name), false);
                }
            }
            if (Recursive)
            {
                foreach (DirectoryInfo SubDirectory in Source.EnumerateDirectories())
                {
                    SubDirectory.CopyTo(Path.Combine(DestinationInfo.FullName, SubDirectory.Name), Recursive, Options);
                }
            }
            return(new DirectoryInfo(Destination));
        }
Example #2
0
        /// <summary>
        /// Copies the directory to the specified parent directory
        /// </summary>
        /// <param name="Directory">Directory to copy to</param>
        /// <param name="Options">Copy options</param>
        /// <returns>Returns the new directory</returns>
        public virtual IDirectory CopyTo(IDirectory Directory, CopyOptions Options = CopyOptions.CopyAlways)
        {
            if (InternalDirectory == null || Directory == null)
            {
                return(this);
            }
            Directory.Create();
            foreach (IFile TempFile in EnumerateFiles())
            {
                switch (Options)
                {
                case CopyOptions.CopyAlways:
                    TempFile.CopyTo(Directory, true);
                    break;

                case CopyOptions.CopyIfNewer:
                    if (new FileInfo(Directory.FullName + "\\" + TempFile.Name.Replace("/", "").Replace("\\", ""), UserName, Password, Domain).Exists)
                    {
                        var FileInfo = new FileInfo(Directory.FullName + "\\" + TempFile.Name.Replace("/", "").Replace("\\", ""), UserName, Password, Domain);
                        if (FileInfo.Modified.CompareTo(TempFile.Modified) < 0)
                        {
                            TempFile.CopyTo(Directory, true);
                        }
                    }
                    else
                    {
                        TempFile.CopyTo(Directory, true);
                    }

                    break;

                case CopyOptions.DoNotOverwrite:
                    TempFile.CopyTo(Directory, false);
                    break;
                }
            }
            foreach (IDirectory SubDirectory in EnumerateDirectories())
            {
                SubDirectory.CopyTo(new DirectoryInfo(Directory.FullName + "\\" + SubDirectory.Name.Replace("/", "").Replace("\\", ""), UserName, Password, Domain), Options);
            }
            return(Directory);
        }
Example #3
0
        /// <summary>
        /// Copies the directory to the specified parent directory
        /// </summary>
        /// <param name="directory">Directory to copy to</param>
        /// <param name="options">Copy options</param>
        /// <returns>Returns the new directory</returns>
        public virtual IDirectory CopyTo(IDirectory directory, CopyOptions options = CopyOptions.CopyAlways)
        {
            if (InternalDirectory is null || directory is null || string.IsNullOrEmpty(directory.FullName))
            {
                return(this);
            }
            directory.Create();
            foreach (var TempFile in EnumerateFiles())
            {
                switch (options)
                {
                case CopyOptions.CopyAlways:
                    TempFile.CopyTo(directory, true);
                    break;

                case CopyOptions.CopyIfNewer:
                    if (new FileInfo(directory.FullName + "\\" + TempFile.Name.Replace("/", "").Replace("\\", ""), Credentials).Exists)
                    {
                        var FileInfo = new FileInfo(directory.FullName + "\\" + TempFile.Name.Replace("/", "").Replace("\\", ""), Credentials);
                        if (FileInfo.Modified.CompareTo(TempFile.Modified) < 0)
                        {
                            TempFile.CopyTo(directory, true);
                        }
                    }
                    else
                    {
                        TempFile.CopyTo(directory, true);
                    }

                    break;

                case CopyOptions.DoNotOverwrite:
                    TempFile.CopyTo(directory, false);
                    break;
                }
            }
            foreach (var SubDirectory in EnumerateDirectories())
            {
                SubDirectory.CopyTo(new DirectoryInfo(directory.FullName + "\\" + SubDirectory.Name.Replace("/", "").Replace("\\", ""), Credentials), options);
            }
            return(directory);
        }