private void MoveFolder_UpdateTreeViewFolderBrowser(TreeViewFolderBrowser folderTreeView, string sourceDirectory, string targetDirectory, TreeNode targetNode) { if (sourceDirectory == targetDirectory) { return; //Can't move into itself. No need for error message } try { using (new WaitCursor()) { FileData[] fileDatas = FastDirectoryEnumerator.GetFiles(sourceDirectory, "*.*", SearchOption.AllDirectories); #region Move all folder and files Logger.Trace("Move folder from:" + sourceDirectory + " to: " + targetDirectory); System.IO.Directory.Move(sourceDirectory, targetDirectory); #endregion #region Clear ImageListView ImageListViewHandler.ClearAllAndCaches(imageListView1); #endregion #region Update node tree GlobalData.DoNotTrigger_TreeViewFolder_BeforeAndAfterSelect = true; TreeViewFolderBrowserHandler.RefreshFolderWithName(folderTreeView, sourceDirectory, true); TreeViewFolderBrowserHandler.RemoveFolderWithName(folderTreeView, sourceDirectory); TreeViewFolderBrowserHandler.RefreshFolderWithName(folderTreeView, targetDirectory, true); GlobalData.DoNotTrigger_TreeViewFolder_BeforeAndAfterSelect = false; #endregion #region Update database foreach (FileData oldFileData in fileDatas) { string oldFilename = Path.GetFileName(oldFileData.Path); string newFullFilename = Path.Combine(targetDirectory, oldFilename); Logger.Trace("Rename from:" + oldFileData.Path + " to: " + newFullFilename); databaseAndCacheThumbnailPoster.Move(Path.GetDirectoryName(oldFileData.Path), Path.GetFileName(oldFileData.Path), Path.GetDirectoryName(newFullFilename), Path.GetFileName(newFullFilename)); databaseAndCacheMetadataExiftool.Move(Path.GetDirectoryName(oldFileData.Path), Path.GetFileName(oldFileData.Path), Path.GetDirectoryName(newFullFilename), Path.GetFileName(newFullFilename)); } #endregion DirectoryInfo directoryInfo = new DirectoryInfo(sourceDirectory); string targetFullFolderName = targetDirectory + directoryInfo.Parent.Name; GlobalData.DoNotTrigger_TreeViewFolder_BeforeAndAfterSelect = true; treeViewFolderBrowser1.Populate(targetDirectory); GlobalData.DoNotTrigger_TreeViewFolder_BeforeAndAfterSelect = false; } //----- Updated ImageListView with files ------ ImageListView_FetchListOfMediaFiles_FromFolder_and_Aggregate(false, true); } catch (Exception ex) { Logger.Error(ex, "Error when move folder."); AddError( sourceDirectory, AddErrorFileSystemRegion, AddErrorFileSystemMoveFolder, sourceDirectory, targetDirectory, "Issue: Failed moving directory.\r\n" + "From Directory: " + sourceDirectory + "\r\n" + "To Directory: " + targetDirectory + "\r\n" + "Error message: " + ex.Message); } }
private void MoveFilesNoRename_UpdateTreeViewFolderBrowser(TreeViewFolderBrowser folderTreeView, ImageListView imageListView, StringCollection files, string targetNodeDirectory, TreeNode treeNodeTarget) { if (GlobalData.IsApplicationClosing) { return; } if (InvokeRequired) { this.BeginInvoke(new Action <TreeViewFolderBrowser, ImageListView, StringCollection, string, TreeNode>(MoveFilesNoRename_UpdateTreeViewFolderBrowser), folderTreeView, imageListView, files, targetNodeDirectory, treeNodeTarget); return; } if (GlobalData.IsApplicationClosing) { return; } if (DoNotTrigger_ImageListView_SelectionChanged()) { return; } try { GlobalData.DoNotTrigger_ImageListView_SelectionChanged = true; ImageListViewHandler.SuspendLayout(imageListView1); #region Do the work using (new WaitCursor()) { foreach (string oldPath in files) //Move all files to target directory { string sourceFullFilename = oldPath; string filename = Path.GetFileName(sourceFullFilename); string targetFullFilename = Path.Combine(targetNodeDirectory, filename); try { bool directoryCreated = filesCutCopyPasteDrag.MoveFile(sourceFullFilename, targetFullFilename); //------ Update node tree ----- GlobalData.DoNotTrigger_TreeViewFolder_BeforeAndAfterSelect = true; if (treeNodeTarget == null) { string targetFolder = Path.GetDirectoryName(targetFullFilename); TreeViewFolderBrowserHandler.RemoveFolderWithName(folderTreeView, targetFolder); } else { TreeViewFolderBrowserHandler.RefreshTreeNode(folderTreeView, treeNodeTarget); } GlobalData.DoNotTrigger_TreeViewFolder_BeforeAndAfterSelect = false; ImageListViewItem foundItem = ImageListViewHandler.FindItem(imageListView.Items, sourceFullFilename); if (foundItem != null) { ImageListViewHandler.ImageListViewRemoveItem(imageListView, foundItem); } } catch (Exception ex) { DateTime dateTimeLastWriteTime = DateTime.Now; try { dateTimeLastWriteTime = FileHandler.GetLastWriteTime(sourceFullFilename); } catch { } FileStatus fileStatus = FileHandler.GetFileStatus( sourceFullFilename, checkLockedStatus: true, hasErrorOccured: true, errorMessage: ex.Message); ImageListView_UpdateItemFileStatusInvoke(sourceFullFilename, fileStatus); FileStatus fileStatusTarget = FileHandler.GetFileStatus( targetFullFilename, checkLockedStatus: true, hasErrorOccured: true, errorMessage: ex.Message, exiftoolProcessStatus: ExiftoolProcessStatus.DoNotUpdate); ImageListView_UpdateItemFileStatusInvoke(targetFullFilename, fileStatus); AddError( Path.GetDirectoryName(sourceFullFilename), Path.GetFileName(sourceFullFilename), dateTimeLastWriteTime, AddErrorFileSystemRegion, AddErrorFileSystemMove, sourceFullFilename, targetFullFilename, "Issue: Failed moving file.\r\n" + "From File name : " + sourceFullFilename + "\r\n" + "From File staus: " + fileStatus.ToString() + "\r\n" + "To File name : " + targetFullFilename + "\r\n" + "To File staus: " + fileStatusTarget.ToString() + "\r\n" + "Error message: " + ex.Message); Logger.Error(ex, "Error when move file."); } } } #endregion } catch (Exception ex) { Logger.Error(ex); KryptonMessageBox.Show("Unexpected error occur.\r\nException message:" + ex.Message + "\r\n", "Unexpected error occur", MessageBoxButtons.OK, MessageBoxIcon.Error, showCtrlCopy: true); } finally { GlobalData.IsPerformingAButtonAction = false; ImageListViewHandler.ResumeLayout(imageListView1); GlobalData.DoNotTrigger_ImageListView_SelectionChanged = false; ImageListView_SelectionChanged_Action_ImageListView_DataGridView(false); } }