private void enumerate(EnumeratorDelegate func, FileIndexorNode parent) { foreach (FileIndexorNode node in parent.Nodes) { enumerate(func, node); func(node.Path, node.Files); } }
/// <summary> /// 모든 폴더를 나열합니다. /// </summary> /// <param name="target_directory"></param> /// <returns></returns> public async Task ListingDirectoryAsync(string target_directory) { root_directory = target_directory; await Task.Run(() => prelistingFolder(target_directory)); directory_list.Sort(); node = new FileIndexorNode(target_directory, 0, null); await Task.Run(() => createNodes()); }
/// <summary> /// 만들어진 폴더 목록을 기반으로 트리 노드를 작성합니다. /// </summary> private void createNodes() { for (; index < directory_list.Count - 1; index++) { FileIndexorNode _node = new FileIndexorNode(directory_list[index].Item1, directory_list[index].Item2, directory_list[index].Item3); if (directory_list[index + 1].Item1.Contains(directory_list[index].Item1)) { node.AddItem(_node); index += 1; createNodesRecursize(ref _node); break; } } }
/// <summary> /// 경로를 이용해 노드를 가져옵니다. /// </summary> /// <param name="path"></param> /// <returns></returns> public FileIndexorNode GetPathNode(string path) { string[] seperated = path.Split('\\'); string section = ""; FileIndexorNode n = node; for (int i = 0; i < seperated.Length; i++) { section += seperated[i] + '\\'; foreach (FileIndexorNode nd in n.Nodes) { if (nd.Path == section) { n = nd; break; } } } return(n); }
private void createNodesRecursize(ref FileIndexorNode parent_node) { for (; index < directory_list.Count; index++) { if (directory_list[index].Item1.Contains(parent_node.Path)) { FileIndexorNode m = new FileIndexorNode(directory_list[index].Item1, directory_list[index].Item2, directory_list[index].Item3); parent_node.AddItem(m); if (index < directory_list.Count - 1 && directory_list[index + 1].Item1.Contains(directory_list[index].Item1)) { index++; createNodesRecursize(ref m); } parent_node.Size += m.Size; } else { index--; break; } } }
/// <summary> /// 파일인덱서를 초기화합니다. /// </summary> public void Clear() { directory_list.Clear(); error_list.Clear(); node = null; }
/// <summary> /// 하위 노드를 추가합니다. /// </summary> /// <param name="node"></param> public void AddItem(FileIndexorNode node) { nodes.Add(node); }