/// <summary> /// Читает и выводит в консоль файл в выбранной кодировке. /// </summary> /// <param name="encoding">Выбранная кодировка. Если null, то просит пользователя выбрать.</param> private void ReadFiles(Encoding encoding = null) { AskEncoding(encoding, encoding => manager.RootContainer.Loop.OnPaused = () => { var errors = new List <(string filename, string message)>(); foreach (var file in manager.SelectedFiles) { var result = SafeIO .GetFullPath(file) .AndThen(fullPath => SafeIO.StreamReader(fullPath, encoding)) .AndThen(reader => { foreach (var maybeBlock in reader.ReadBlocks()) { if (maybeBlock.State == ResultState.Error) { return(maybeBlock.Map(_ => new object())); } foreach (var c in maybeBlock.Value) { Console.Write(c); } } return(Result <object> .Ok(new object())); }); if (result is { State: ResultState.Error, ErrorMessage: var error })
/// <summary> /// Меняет текущую директорию. /// </summary> /// <param name="to">В какую директорию нужно перейти. null, если к списку дисков.</param> public void ChangeDir(string?to) { if (to == null) { CurrentDirectory = null; } else { var isExists = SafeIO .GetFullPath(to) .AndThen(fullPath => SafeIO .Exists(fullPath) .AndThen(isExists => isExists ? Result <string> .Ok(fullPath) : Result <string> .Error("Невозможно перейти в указанную директорию")) ) .AndThen(SafeIO.DirectoryInfo); var chDir = isExists .AndThen(dirInfo => SafeIO.ChangeCurrentDirectory(dirInfo.FullName)); ShowError(isExists, "Не удалось сменить директорию", "Нажмите «/», чтобы перейти к списку дисков."); if (isExists is { State : ResultState.Ok, Value : var directoryInfo })