/// <summary> /// Переименовывает файлы по указанному списку. Первым идет иисходный файл, через ; новой имя файла /// Если файл уже существует, то он пропускается /// </summary> /// <param name="pFileAction"></param> /// <param name="pWorkList"></param> private void RenameByFileCSV(FileAction pFileAction) { using (StreamReader sr = new StreamReader(pFileAction.SourceFilename)) { string inputLine; inputLine = sr.ReadLine(); while (inputLine != null) { if (!string.IsNullOrWhiteSpace(inputLine)) { var Pos = inputLine.IndexOf(';'); if (Pos >= 0) { var SourceName = inputLine.Substring(0, Pos - 1).Trim(); var TargetName = inputLine.Substring(Pos + 1).Trim(); if (File.Exists(SourceName)) { FilenameInfo fi = new FilenameInfo(SourceName, false); var TargetFullname = fi.Directory + "\\" + TargetName; if (!File.Exists(TargetFullname)) { File.Move(SourceName, TargetFullname); } } else { Console.WriteLine("Not found: {SourceName}"); } } } inputLine = sr.ReadLine(); } } }
/// <summary> /// Формирует список файлов для перемещения /// </summary> private void MakeWorkList(FileAction pFileAction, List <FilenameInfo> pWorkList) { var pFilter = pFileAction.Filter; // получает строки с полным именем файла var Files = Directory.EnumerateFiles(pFilter.StartDirectory, pFilter.Extension, SearchOption.AllDirectories); foreach (var someFilename in Files) { var someInfo = new FilenameInfo(someFilename, false); if (pFilter.ExcludeFirstDigit) { if (char.IsDigit(someInfo.Name[0])) { continue; } } if (!string.IsNullOrWhiteSpace(pFilter.ExcludeParentDir)) { if (someInfo.Directory.EndsWith(pFilter.ExcludeParentDir, StringComparison.OrdinalIgnoreCase)) { continue; } } // добавить информацию cue, если расширение файла cue и влючение режим использования cue if (pFilter.DetectCueSheet) { if (string.Compare(someInfo.Extension, "cue", true) == 0) { try { someInfo.CueSheet = new CueSharp.CueSheet(someFilename); } catch { // } } } pWorkList.Add(someInfo); } // Ищем каталоги в которых найдено более одного файла var S = from A in pWorkList group A by A.Directory into G select new { Name = G.Key, Kolvo = G.Count() }; foreach (var some in S) { if (some.Kolvo == 1) { continue; } var Many = from A in pWorkList where A.Directory == some.Name select A; int Order = 1; foreach (var someMany in Many) { someMany.Order = Order; Order++; } } }
/// <summary> /// Формирует список дополнительных файлов, которые будут перемещаться вместе с основным /// Поиск по указанному расширению. /// </summary> private void MakeAddList(FileAction pFileAction, List <FilenameInfo> pWorkList) { var pFilter = pFileAction.Filter; if (pWorkList.Count() == 0) { return; } if (string.IsNullOrWhiteSpace(pFilter.Extension)) { return; } foreach (var someFileInfo in pWorkList) { IEnumerable <string> AddFiles = null; try { AddFiles = Directory.EnumerateFiles(someFileInfo.Directory + "\\" + pFilter.StartDirectory, pFilter.Extension, SearchOption.TopDirectoryOnly); } catch { } if (AddFiles != null) { foreach (var someFilename in AddFiles) { var AddInfo = new FilenameInfo(someFilename, false); if (pFileAction.JoinByName) { if (AddInfo.NameOnly.StartsWith(someFileInfo.NameOnly, StringComparison.OrdinalIgnoreCase)) { someFileInfo.LinkedFiles.Add(AddInfo); } } else { someFileInfo.LinkedFiles.Add(AddInfo); } } } } }
private void MakeWorkDirList(FileAction pFileAction, List <FilenameInfo> pWorkList) { var pFilter = pFileAction.Filter; // получает строки с полным именем файла var Files = Directory.EnumerateDirectories(pFilter.StartDirectory, pFilter.Extension, SearchOption.AllDirectories); foreach (var someFilename in Files) { var someInfo = new FilenameInfo(someFilename, true); if (!string.IsNullOrWhiteSpace(pFilter.ExcludeParentDir)) { if (someInfo.Directory.EndsWith(pFilter.ExcludeParentDir, StringComparison.OrdinalIgnoreCase)) { continue; } } pWorkList.Add(someInfo); } }