/// <summary> /// Handles the Deleted event of the Watcher control. /// if the renamed is folder all child dir and files get deleted flag /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="FileSystemEventArgs"/> instance containing the event data.</param> private void Watcher_Deleted(object sender, FileSystemEventArgs e) { if (IsFiltered(e.FullPath)) { return; } Tree_Creator._m_File_Manager_Tree_FileTree_Node ft = mfmtfdb.GetFromPath(e.FullPath); if (ft != null) { ft.LastChange = DateTime.Now; ft.Deleted = true; mfmtfdb.UpdateFileTreeNode(ft); SetDeletedFlagToAllSubFT(ft); } else { ///<description> ///if the deleted file or folder is not find ergo when the file is created ///the whatcher is not up (for many reason like program is down or any) ///now we go back to top and top to find last parent is logged into db ///after find that start to record all childs to end after that ///set deleted flag to current file or dir ///</description> WriteChange(e); Watcher_Deleted(sender, e); } }
/// <summary> /// Handles the Changed event of the Watcher control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="FileSystemEventArgs"/> instance containing the event data.</param> private void Watcher_Changed(object sender, FileSystemEventArgs e) { if (IsFiltered(e.FullPath)) { return; } Tree_Creator._m_File_Manager_Tree_FileTree_Node ft = mfmtfdb.GetFromPath(e.FullPath); if (ft != null) { ft.LastChange = DateTime.Now; mfmtfdb.UpdateFileTreeNode(ft); } else { WriteChange(e); } }
/// <summary> /// Sets the newft to parent all sub ft. /// </summary> /// <param name="newft">The newft.</param> /// <param name="oldft">The oldft.</param> private void SetNewftToParentAllSubFT(Tree_Creator._m_File_Manager_Tree_FileTree_Node newft, Tree_Creator._m_File_Manager_Tree_FileTree_Node oldft) { while (true) { List <Tree_Creator._m_File_Manager_Tree_FileTree_Node> Childs = mfmtfdb.GetChilds(oldft); if (Childs != null) { foreach (Tree_Creator._m_File_Manager_Tree_FileTree_Node Child in Childs) { Child.LastChange = DateTime.Now; Child.Id_Parent = newft.Id; mfmtfdb.UpdateFileTreeNode(Child); } } break; } }
/// <summary> /// Sets the deleted flag to all sub ft. /// </summary> /// <param name="ft">The ft.</param> private void SetDeletedFlagToAllSubFT(Tree_Creator._m_File_Manager_Tree_FileTree_Node ft) { while (true) { List <Tree_Creator._m_File_Manager_Tree_FileTree_Node> Childs = mfmtfdb.GetChilds(ft); if (Childs != null) { foreach (Tree_Creator._m_File_Manager_Tree_FileTree_Node Child in Childs) { Child.LastChange = DateTime.Now; Child.Deleted = true; mfmtfdb.UpdateFileTreeNode(Child); SetDeletedFlagToAllSubFT(Child); } } break; } }
/// <summary> /// Handles the Renamed event of the Watcher control. /// if the renamed is folder all child dir and files get new parent /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="RenamedEventArgs"/> instance containing the event data.</param> private void Watcher_Renamed(object sender, RenamedEventArgs e) { if (IsFiltered(e.FullPath)) { return; } Tree_Creator._m_File_Manager_Tree_FileTree_Node oldft = mfmtfdb.GetFromPath(e.OldFullPath); if (oldft != null) { WriteChange(e); Tree_Creator._m_File_Manager_Tree_FileTree_Node newft = mfmtfdb.GetFromPath(e.FullPath); oldft.LastChange = newft.LastChange; oldft.Deleted = true; oldft.RenamedTo = newft.Id; mfmtfdb.UpdateFileTreeNode(oldft); SetNewftToParentAllSubFT(newft, oldft); } else { WriteChange(e); } }
/// <summary> /// Writes the change. /// </summary> /// <param name="e">The <see cref="FileSystemEventArgs"/> instance containing the event data.</param> private void WriteChange(FileSystemEventArgs e) { if (IsFiltered(e.FullPath)) { return; } Tree_Creator._m_File_Manager_Tree_FileTree_Node Parent_ft = mfmtfdb.GetParentFromPath(e.FullPath); if (Parent_ft != null) { Tree_Creator._m_File_Manager_Tree_FileTree_Node new_child_ft = new Tree_Creator._m_File_Manager_Tree_FileTree_Node(); new_child_ft.Id_Parent = Parent_ft.Id; new_child_ft.Name = GetNameFromFullPath(e.FullPath); FileInfo fi = new FileInfo(e.FullPath); ///<description> ///detect file or dir ///when file has attribiute -1 hasflag not work and detect file like dir ///i think when file is open by another process attribiute is -1 ///</description> //Additional information: Access to the path 'C:\Windows\Prefetch\CONSENT.EXE-65F6206D.pf' is denied. try { if (fi.Attributes.HasFlag(FileAttributes.Directory)) { new_child_ft.Type = Tree_Creator._m_File_Manager_Tree_FileTree_Node.enum_Type.Directory; } else { new_child_ft.Type = Tree_Creator._m_File_Manager_Tree_FileTree_Node.enum_Type.File; } } catch (Exception ex) { new_child_ft.Type = Tree_Creator._m_File_Manager_Tree_FileTree_Node.enum_Type.File; } new_child_ft.LastChange = DateTime.Now; ///<description> ///set End_Progress to all new file and dir because before change it . on tree creator ///log all dir and folder ///the new dir has no child ///and when create new child record again ///</description> new_child_ft.Progress = Tree_Creator._m_File_Manager_Tree_FileTree_Node.enum_Progress.End_Progress; mfmtfdb.WriteNew(new_child_ft); } else { ///<description> ///if the deleted file or folder is not find ergo when the file is created ///the whatcher is not up (for many reason like program is down or any) ///now we go back to top and top to find last parent is logged into db ///after find that start to record all childs to end after that ///</description> FileInfo fi = new FileInfo(e.FullPath); while (fi.Directory != null) { fi = new FileInfo(fi.Directory.FullName); Parent_ft = mfmtfdb.GetParentFromPath(fi.FullName); if (Parent_ft != null) { string directory = fi.FullName.Substring(0, fi.FullName.LastIndexOf("\\")); string name = fi.FullName.Substring(fi.FullName.LastIndexOf("\\") + 1); FileSystemEventArgs ee = new FileSystemEventArgs(new WatcherChangeTypes(), directory, name); WriteChange(ee); break; } } } }