internal string RenameFolder(string pathFolder, string newNameFolder) { int pLen = pathFolder.Length; int sLen = pLen - 1; int last = pathFolder.LastIndexOf('\\', sLen - 1) + 1; string newPath = pathFolder.Remove(last) + newNameFolder.ToLowerInvariant() + '\\'; List <string> removeKeys = new List <string>(); SortedDictionary <String, TreeFiles> addFiles = new SortedDictionary <string, TreeFiles>(); foreach (var item in treeFiles.Keys) { if (item.StartsWith(pathFolder)) { string newPathKey = newPath + item.Substring(pLen); string folder = treeFiles[item].FolderPath; string pre = folder.Remove(last) + newNameFolder; TreeFiles tFiles = new TreeFiles(pre + folder.Substring(sLen)); foreach (var file in treeFiles[item].GetFiles()) { tFiles.AddFile(new sFile(file, tFiles.FolderPath)); } removeKeys.Add(item); addFiles.Add(newPathKey, tFiles); } } if (addFiles.Count == 0) { return(null); // внесение изменений в дат не требуется } foreach (var item in removeKeys) { treeFiles.Remove(item); } foreach (var pair in addFiles) { treeFiles.Add(pair.Key, pair.Value); } DATManage.RenameFolder(DatName, pathFolder, newNameFolder); if (shouldSave == SaveType.None) { shouldSave = SaveType.DirTree; } return(newPath); }
internal void DeleteFile(List <string> pathFileList, bool alsoFolder) { // удаление файлов из дерева (остаются только пустые папки если в них нет файлов) string folder = null; TreeFiles files = null; List <string> folders = new List <string>(); for (int i = 0; i < pathFileList.Count; i++) { string file = pathFileList[i]; int n = file.LastIndexOf('\\') + 1; if (folder == null) { folder = file.Remove(n); files = treeFiles[folder]; folders.Add(folder); } string f = file.Remove(n); if (f != folder) { folder = f; files = treeFiles[folder]; folders.Add(folder); } files.RemoveFile(file); } if (alsoFolder) { foreach (var f in folders) { RemoveEmptyFolder(f); } } TotalFiles -= pathFileList.Count; // удаление файлов из Dat if (dat.RemoveFiles(pathFileList)) { shouldSave = SaveType.New; } }