コード例 #1
0
ファイル: DirectoryBase.cs プロジェクト: JaCraig/FileCurator
        /// <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>
        public async Task <IDirectory> CopyToAsync(IDirectory directory, CopyOptions options = CopyOptions.CopyAlways)
        {
            if (InternalDirectory is null || directory is null || string.IsNullOrEmpty(directory.FullName))
            {
                return(this);
            }
            directory.Create();
            List <Task> Tasks = new List <Task>();

            foreach (var TempFile in EnumerateFiles())
            {
                switch (options)
                {
                case CopyOptions.CopyAlways:
                    Tasks.Add(TempFile.CopyToAsync(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)
                        {
                            Tasks.Add(TempFile.CopyToAsync(directory, true));
                        }
                    }
                    else
                    {
                        Tasks.Add(TempFile.CopyToAsync(directory, true));
                    }

                    break;

                case CopyOptions.DoNotOverwrite:
                    Tasks.Add(TempFile.CopyToAsync(directory, true));
                    break;
                }
            }
            await Task.WhenAll(Tasks).ConfigureAwait(false);

            Tasks.Clear();
            foreach (var SubDirectory in EnumerateDirectories())
            {
                Tasks.Add(SubDirectory.CopyToAsync(new DirectoryInfo(directory.FullName + "\\" + SubDirectory.Name.Replace("/", "").Replace("\\", ""), Credentials), options));
            }
            await Task.WhenAll(Tasks).ConfigureAwait(false);

            return(directory);
        }