コード例 #1
0
ファイル: FileSystem.cs プロジェクト: yodiwo/plegma
        public static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs, FileOverwriteModes FileOverwriteMode = FileOverwriteModes.Overwrite, bool ignoreCopyErrors = false, Func<FileInfo, bool> FileFilter = null, Func<DirectoryInfo, bool> DirectoryFilter = null)
        {
            //check if the source directory does exists
            if (!Directory.Exists(sourceDirName))
                return;

            //get directory info
            var dir = new DirectoryInfo(sourceDirName);

            // If the destination directory does not exist, create it.
            if (!Directory.Exists(destDirName))
                Directory.CreateDirectory(destDirName);

            // Copy files
            Parallel.ForEach(dir.GetFiles(), file =>
            {
                if (FileFilter == null || FileFilter(file))
                    try
                    {
                        var dstFileName = Path.Combine(destDirName, file.Name);
                        if (FileOverwriteMode == FileOverwriteModes.Overwrite || !File.Exists(dstFileName))
                            file.CopyTo(dstFileName, true);
                        else if (FileOverwriteMode == FileOverwriteModes.IfDestinationIsNewer && (file.LastWriteTime - new FileInfo(dstFileName).LastWriteTime) > TimeSpan.Zero)
                            file.CopyTo(dstFileName, true);
                        else if (FileOverwriteMode == FileOverwriteModes.IfLastWriteMismatch && file.LastWriteTime != new FileInfo(dstFileName).LastWriteTime)
                            file.CopyTo(dstFileName, true);
                    }
                    catch (Exception ex)
                    {
                        if (!ignoreCopyErrors)
                            throw ex;
                    }
            });

            // If copySubDirs is true, copy the subdirectories.
            if (copySubDirs)
            {
                //copy subdirectories
                foreach (DirectoryInfo subdir in dir.GetDirectories())
                    if (DirectoryFilter == null || DirectoryFilter(subdir))
                    {
                        // Create the subdirectory.
                        string temppath = Path.Combine(destDirName, subdir.Name);

                        // Copy the subdirectories.
                        DirectoryCopy(subdir.FullName, temppath, copySubDirs);
                    }
            }
        }
コード例 #2
0
        public static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs, FileOverwriteModes FileOverwriteMode = FileOverwriteModes.Overwrite, bool ignoreCopyErrors = false, Func <FileInfo, bool> FileFilter = null, Func <DirectoryInfo, bool> DirectoryFilter = null)
        {
            //check if the source directory does exists
            if (!Directory.Exists(sourceDirName))
            {
                return;
            }

            //get directory info
            var dir = new DirectoryInfo(sourceDirName);

            // If the destination directory does not exist, create it.
            if (!Directory.Exists(destDirName))
            {
                Directory.CreateDirectory(destDirName);
            }

            // Copy files
            Parallel.ForEach(dir.GetFiles(), file =>
            {
                if (FileFilter == null || FileFilter(file))
                {
                    try
                    {
                        var dstFileName = Path.Combine(destDirName, file.Name);
                        if (FileOverwriteMode == FileOverwriteModes.Overwrite || !File.Exists(dstFileName))
                        {
                            file.CopyTo(dstFileName, true);
                        }
                        else if (FileOverwriteMode == FileOverwriteModes.IfDestinationIsNewer && (file.LastWriteTime - new FileInfo(dstFileName).LastWriteTime) > TimeSpan.Zero)
                        {
                            file.CopyTo(dstFileName, true);
                        }
                        else if (FileOverwriteMode == FileOverwriteModes.IfLastWriteMismatch && file.LastWriteTime != new FileInfo(dstFileName).LastWriteTime)
                        {
                            file.CopyTo(dstFileName, true);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (!ignoreCopyErrors)
                        {
                            throw ex;
                        }
                    }
                }
            });

            // If copySubDirs is true, copy the subdirectories.
            if (copySubDirs)
            {
                //copy subdirectories
                foreach (DirectoryInfo subdir in dir.GetDirectories())
                {
                    if (DirectoryFilter == null || DirectoryFilter(subdir))
                    {
                        // Create the subdirectory.
                        string temppath = Path.Combine(destDirName, subdir.Name);

                        // Copy the subdirectories.
                        DirectoryCopy(subdir.FullName, temppath, copySubDirs);
                    }
                }
            }
        }