private void FileCopyFlags_SelectedValueChanged(object sender, EventArgs e) { for (int i = 0; i < FileCopyFlags.Items.Count; i++) { switch (i) { case 0: ProfileManager.CurrentProfile.FileCopyFlags.Data = FileCopyFlags.GetItemChecked(i); break; case 1: ProfileManager.CurrentProfile.FileCopyFlags.Attributes = FileCopyFlags.GetItemChecked(i); break; case 2: ProfileManager.CurrentProfile.FileCopyFlags.TimeStamps = FileCopyFlags.GetItemChecked(i); break; case 3: ProfileManager.CurrentProfile.FileCopyFlags.Security = FileCopyFlags.GetItemChecked(i); break; case 4: ProfileManager.CurrentProfile.FileCopyFlags.Owner = FileCopyFlags.GetItemChecked(i); break; case 5: ProfileManager.CurrentProfile.FileCopyFlags.Auditing = FileCopyFlags.GetItemChecked(i); break; } } }
static void Recursive_Copy(GLib.File source, GLib.File dest, FileCopyFlags flags, ref long copiedBytes, long totalBytes, FileProgressCallback progress_cb) { if (IO.File.Exists(source.Path)) { source.Copy(dest, flags, null, (current, total) => { progress_cb.Invoke(current, totalBytes); }); return; } foreach (GLib.File subdir in source.SubDirs()) { dest.GetChild(subdir.Basename).MakeDirectoryWithParents(null); // if it's a directory, continue the recursion Recursive_Copy(subdir, dest.GetChild(subdir.Basename), flags, ref copiedBytes, totalBytes, progress_cb); } foreach (File child in source.GetFiles()) { long copied = copiedBytes; child.Copy(dest.GetChild(child.Basename), flags, null, (current, total) => { progress_cb.Invoke(copied + current, totalBytes); }); copiedBytes += child.GetSize(); } }
// This is the recursive equivalent of GLib.File.Copy () /// <summary> /// Recursive equivalent to GLib.File.Copy () when called on a directory. /// Functionally equivalent to GLib.File.Copy () when called on files. /// </summary> /// <param name="source"> /// A <see cref="GLib.File"/> /// </param> /// <param name="dest"> /// A <see cref="GLib.File"/> /// </param> /// <param name="flags"> /// A <see cref="FileCopyFlags"/> /// </param> /// <param name="progress_cb"> /// A <see cref="FileProgressCallback"/> /// </param> public static void Copy_Recurse(this GLib.File source, GLib.File dest, FileCopyFlags flags, FileProgressCallback progress_cb) { long totalBytes = source.GetSize(); long copiedBytes = 0; Recursive_Copy(source, dest, flags, ref copiedBytes, totalBytes, progress_cb); }
private void SettingsForm_Load(object sender, EventArgs e) { ProfileName.Text = ProfileManager.CurrentName; FileFilter.Text = ProfileManager.CurrentProfile.FileFilter; EnableRestartMode.Checked = ProfileManager.CurrentProfile.EnableRestartMode; EnableBackupMode.Checked = ProfileManager.CurrentProfile.EnableBackupMode; UseUnbufferedIo.Checked = ProfileManager.CurrentProfile.UseUnbufferedIo; if (ProfileManager.CurrentProfile.Mirror) { Mirror.Checked = true; CopySubdirectories.Checked = true; CopySubdirectoriesIncludingEmpty.Checked = true; Purge.Checked = true; CopySubdirectories.Enabled = false; CopySubdirectoriesIncludingEmpty.Enabled = false; Purge.Enabled = false; } else { CopySubdirectories.Checked = ProfileManager.CurrentProfile.CopySubdirectories; CopySubdirectoriesIncludingEmpty.Checked = ProfileManager.CurrentProfile.CopySubdirectoriesIncludingEmpty; Purge.Checked = ProfileManager.CurrentProfile.Purge; } Depth.Value = ProfileManager.CurrentProfile.Depth; MoveFiles.Checked = ProfileManager.CurrentProfile.MoveFiles; MoveFilesAndDirectories.Checked = ProfileManager.CurrentProfile.MoveFilesAndDirectories; CreateDirectoryAndFileTree.Checked = ProfileManager.CurrentProfile.CreateDirectoryAndFileTree; FatFiles.Checked = ProfileManager.CurrentProfile.FatFiles; TurnLongPathSupportOff.Checked = ProfileManager.CurrentProfile.TurnLongPathSupportOff; CopySymbolicLink.Checked = ProfileManager.CurrentProfile.CopySymobolicLink; DoNotUseWindowsCopyOffload.Checked = ProfileManager.CurrentProfile.DoNotUseWindowsCopyOffload; CheckPerFile.Checked = ProfileManager.CurrentProfile.CheckPerFile; if (ProfileManager.CurrentProfile.EnableEfsRawMode || ProfileManager.CurrentProfile.InterPacketGap > 0) { UseEfwRawMode.Checked = ProfileManager.CurrentProfile.EnableEfsRawMode; InterPacketGap.Value = ProfileManager.CurrentProfile.InterPacketGap; MultiThreadedCopies.Enabled = false; } else if (ProfileManager.CurrentProfile.MultiThreadedCopiesCount > 0) { MultiThreadedCopies.Value = ProfileManager.CurrentProfile.MultiThreadedCopiesCount; UseEfwRawMode.Enabled = false; InterPacketGap.Enabled = false; } RetryCount.Value = ProfileManager.CurrentProfile.RetryCount; RetryWaitTime.Value = ProfileManager.CurrentProfile.RetryWaitTime; // File Copy Flags if (ProfileManager.CurrentProfile.FileCopyFlags.Data) { FileCopyFlags.SetItemChecked(0, true); } if (ProfileManager.CurrentProfile.FileCopyFlags.Attributes) { FileCopyFlags.SetItemChecked(1, true); } if (ProfileManager.CurrentProfile.FileCopyFlags.TimeStamps) { FileCopyFlags.SetItemChecked(2, true); } if (ProfileManager.CurrentProfile.FileCopyFlags.Security) { FileCopyFlags.SetItemChecked(3, true); } if (ProfileManager.CurrentProfile.FileCopyFlags.Owner) { FileCopyFlags.SetItemChecked(4, true); } if (ProfileManager.CurrentProfile.FileCopyFlags.Auditing) { FileCopyFlags.SetItemChecked(5, true); } // Directory Copy Flags if (ProfileManager.CurrentProfile.DirectoryCopyFlags.Data) { DirectoryCopyFlags.SetItemChecked(0, true); } if (ProfileManager.CurrentProfile.DirectoryCopyFlags.Attributes) { DirectoryCopyFlags.SetItemChecked(1, true); } if (ProfileManager.CurrentProfile.DirectoryCopyFlags.TimeStamps) { DirectoryCopyFlags.SetItemChecked(2, true); } // Add Attributes if (ProfileManager.CurrentProfile.AddAttributes.ReadOnly) { AddAttributes.SetItemChecked(0, true); } if (ProfileManager.CurrentProfile.AddAttributes.Archive) { AddAttributes.SetItemChecked(1, true); } if (ProfileManager.CurrentProfile.AddAttributes.System) { AddAttributes.SetItemChecked(2, true); } if (ProfileManager.CurrentProfile.AddAttributes.Hidden) { AddAttributes.SetItemChecked(3, true); } if (ProfileManager.CurrentProfile.AddAttributes.Compressed) { AddAttributes.SetItemChecked(4, true); } if (ProfileManager.CurrentProfile.AddAttributes.NotContentIndexed) { AddAttributes.SetItemChecked(5, true); } if (ProfileManager.CurrentProfile.AddAttributes.Encrypted) { AddAttributes.SetItemChecked(6, true); } if (ProfileManager.CurrentProfile.AddAttributes.Temporary) { AddAttributes.SetItemChecked(7, true); } if (ProfileManager.CurrentProfile.AddAttributes.Offline) { AddAttributes.SetItemChecked(8, true); } // Remove Attributes if (ProfileManager.CurrentProfile.RemoveAttributes.ReadOnly) { RemoveAttributes.SetItemChecked(0, true); } if (ProfileManager.CurrentProfile.RemoveAttributes.Archive) { RemoveAttributes.SetItemChecked(1, true); } if (ProfileManager.CurrentProfile.RemoveAttributes.System) { RemoveAttributes.SetItemChecked(2, true); } if (ProfileManager.CurrentProfile.RemoveAttributes.Hidden) { RemoveAttributes.SetItemChecked(3, true); } if (ProfileManager.CurrentProfile.RemoveAttributes.Compressed) { RemoveAttributes.SetItemChecked(4, true); } if (ProfileManager.CurrentProfile.RemoveAttributes.NotContentIndexed) { RemoveAttributes.SetItemChecked(5, true); } if (ProfileManager.CurrentProfile.RemoveAttributes.Encrypted) { RemoveAttributes.SetItemChecked(6, true); } if (ProfileManager.CurrentProfile.RemoveAttributes.Temporary) { RemoveAttributes.SetItemChecked(7, true); } if (ProfileManager.CurrentProfile.RemoveAttributes.Offline) { RemoveAttributes.SetItemChecked(8, true); } // Events EnableRestartMode.CheckedChanged += new EventHandler(EnableRestartMode_CheckedChanged); EnableBackupMode.CheckedChanged += new EventHandler(EnableBackupMode_CheckedChanged); UseEfwRawMode.CheckedChanged += new EventHandler(UseEfwRawMode_CheckedChanged); UseUnbufferedIo.CheckedChanged += new EventHandler(UseUnbufferedIo_CheckedChanged); CopySubdirectoriesIncludingEmpty.CheckedChanged += new EventHandler(CopySubdirectoriesIncludingEmpty_CheckedChanged); Purge.CheckedChanged += new EventHandler(Purge_CheckedChanged); CopySubdirectories.CheckedChanged += new EventHandler(CopySubdirectories_CheckedChanged); Mirror.CheckedChanged += new EventHandler(Mirror_CheckedChanged); FileFilter.TextChanged += new EventHandler(FileFilter_TextChanged); RemoveAttributes.SelectedValueChanged += new EventHandler(RemoveAttributes_SelectedValueChanged); AddAttributes.SelectedValueChanged += new EventHandler(AddAttributes_SelectedValueChanged); DirectoryCopyFlags.SelectedValueChanged += new EventHandler(DirectoryCopyFlags_SelectedValueChanged); FileCopyFlags.SelectedValueChanged += new EventHandler(FileCopyFlags_SelectedValueChanged); CheckPerFile.CheckedChanged += new EventHandler(CheckPerFile_CheckedChanged); InterPacketGap.ValueChanged += new EventHandler(InterPacketGap_ValueChanged); MultiThreadedCopies.ValueChanged += new EventHandler(MultiThreadedCopies_ValueChanged); DoNotUseWindowsCopyOffload.CheckedChanged += new EventHandler(DoNotUseWindowsCopyOffload_CheckedChanged); CopySymbolicLink.CheckedChanged += new EventHandler(CopySymbolicLink_CheckedChanged); TurnLongPathSupportOff.CheckedChanged += new EventHandler(TurnLongPathSupportOff_CheckedChanged); FatFiles.CheckedChanged += new EventHandler(FatFiles_CheckedChanged); UseEfwRawMode.CheckedChanged += new EventHandler(UseEfwRawMode_CheckedChanged); CreateDirectoryAndFileTree.CheckedChanged += new EventHandler(CreateDirectoryAndFileTree_CheckedChanged); MoveFilesAndDirectories.CheckedChanged += new EventHandler(MoveFilesAndDirectories_CheckedChanged); MoveFiles.CheckedChanged += new EventHandler(MoveFiles_CheckedChanged); Depth.ValueChanged += new EventHandler(Depth_ValueChanged); RetryCount.ValueChanged += new EventHandler(RetryCount_ValueChanged); RetryWaitTime.ValueChanged += new EventHandler(RetryWaitTime_ValueChanged); }