/// <summary> /// Create new directory in file system /// </summary> /// <param name="context">context for command</param> public Response CreateDirectory(CommandContext context) { if (!hasOneParameter(context.Args)) { Response.Failed("1 аргумент - путь к директории"); } string directoryPath = context.Args[0]; lock (_syncCommand) { IDirectory parentDirectory = findParentDirectory(context); if (parentDirectory == null) { return(Response.Failed("Не найдена директория для создания папки")); } string directoryName = Path.GetFileName(directoryPath); IDirectory newDirectory = new VFSDirectory { Name = directoryName }; try { parentDirectory.AddDirectory(newDirectory); } catch (IOException) { return(Response.Failed("Файл или директория с таким именем уже существует")); } return(Response.Success(true)); } }
public void MyTestInitialize() { _vfsManager = new VFSEngine(); _rootDirectory = CommandHelper.CreateDirectory("c:"); IDirectory child1 = CommandHelper.CreateDirectory("child1"); IDirectory child2 = CommandHelper.CreateDirectory("child2"); _rootDirectory.AddDirectory(child1); _rootDirectory.AddDirectory(child2); child1.AddDirectory(CommandHelper.CreateDirectory("child11")); child1.AddDirectory(CommandHelper.CreateDirectory("child12")); child2.AddDirectory(CommandHelper.CreateDirectory("child21")); child2.AddDirectory(CommandHelper.CreateDirectory("child22")); }
/// <summary> /// Copy file or directory to other directory in file system /// </summary> /// <param name="context">context for command</param> public Response Copy(CommandContext context) { if (!hasTwoParameters(context.Args)) { return(Response.Failed("1 аргумент - путь к директории или файлу, 2 - путь к директории")); } string sourcePath = context.Args[0]; string destPath = context.Args[1]; lock (_syncCommand) { IDirectory destDirectory = FindDirectory(destPath, context.User.CurrentDirectory); IDirectory sourceDirectory = FindDirectory(sourcePath, context.User.CurrentDirectory); if (destDirectory == null) { return(Response.Failed("Не найдена директория, куда нужно скопировать объект")); } if (sourceDirectory == null) { IFile sourceFile = FindFile(sourcePath, context.User.CurrentDirectory); if (sourceFile == null) { return(Response.Failed("Не найден объект для перемещения")); } IFile copiedFile = (IFile)sourceFile.DeepCopy(); copiedFile.LockedUsers.Clear(); try { destDirectory.AddFile(copiedFile); } catch (IOException) { return(Response.Failed("Файл или директория с таким именем уже существует")); } } else { if (sourceDirectory.Parent == null) { return(Response.Failed("Нельзя скопировать корневую директорию")); } IDirectory copiedDirectory = (IDirectory)sourceDirectory.DeepCopy(); copiedDirectory.DeepForEach(d => d.GetDirectories(), d => d.GetFiles().ForEach(f => f.LockedUsers.Clear())); try { destDirectory.AddDirectory(copiedDirectory); } catch (IOException) { return(Response.Failed("Файл или директория с таким именем уже существует")); } } return(Response.Success(true)); } }
public async Task <int> AddDirectory(DirectoryDto dirDto, CancellationToken cancellationToken) { var model = _mapper.Map <Directory>(dirDto); model.CreatedBy = dirDto.CreatedBy; model.ModifiedBy = dirDto.CreatedBy; model.Thumbnail = dirDto.Parent_id == 0 ? Configuration["Thumbnail:RootFolder"] : Configuration["Thumbnail:SubFolder"]; await _repo.AddDirectory(model, cancellationToken).ConfigureAwait(false); return(1); }
private static void AppendChildren(IDirectory dir) { foreach (var subdir in Directory.GetDirectories(dir.FullName)) { AppendChildren(dir.AddDirectory(Path.GetFileName(subdir))); } foreach (var file in Directory.GetFiles(dir.FullName)) { dir.AddFile(Path.GetFileName(file)); } }
public void MyTestInitialize() { _engine = new VFSEngine(); _context = CommandHelper.CreateCommandContext(); _rootDirectory = _context.User.CurrentDirectory; _file1 = CommandHelper.CreateFile("file1"); _rootDirectory.AddFile(_file1); _child1Directory = CommandHelper.CreateDirectory("child1"); _child2Directory = CommandHelper.CreateDirectory("child2"); _child3Directory = CommandHelper.CreateDirectory("child3"); _rootDirectory.AddDirectory(_child1Directory); _rootDirectory.AddDirectory(_child2Directory); _rootDirectory.AddDirectory(_child3Directory); _child1Directory.AddDirectory(CommandHelper.CreateDirectory("child11")); _child1Directory.AddDirectory(CommandHelper.CreateDirectory("child12")); _child2Directory.AddDirectory(CommandHelper.CreateDirectory("child21")); _child2Directory.AddDirectory(CommandHelper.CreateDirectory("child22")); }
/// <summary> /// Move file or directory to other directory in file system /// </summary> /// <param name="context">context for command</param> public Response Move(CommandContext context) { if (!hasTwoParameters(context.Args)) { return(Response.Failed("1 аргумент - путь к директории или файлу, 2 - путь к директории")); } string sourcePath = context.Args[0]; string destPath = context.Args[1]; lock (_syncCommand) { IDirectory destDirectory = FindDirectory(destPath, context.User.CurrentDirectory); IDirectory sourceDirectory = FindDirectory(sourcePath, context.User.CurrentDirectory); if (destDirectory == null) { return(Response.Failed("Не найдена директория, куда нужно переместить объект")); } if (sourceDirectory == null) { IFile sourceFile = FindFile(sourcePath, context.User.CurrentDirectory); if (sourceFile == null) { return(Response.Failed("Не найден объект для перемещения")); } if (sourceFile.LockedUsers.Count > 0) { return(Response.Failed("Нельзя переместить заблокированный файл")); } sourceFile.Directory.RemoveFile(sourceFile); try { destDirectory.AddFile(sourceFile); } catch (IOException) { return(Response.Failed("Файл или директория с таким именем уже существует")); } } else { if (sourceDirectory.Parent == null) { return(Response.Failed("Нельзя перемещать корневую директорию")); } if (sourceDirectory.Exists( d => d.GetDirectories(), d => d.GetFiles().Count(f => f.LockedUsers.Count > 0) > 0)) { return(Response.Failed("Невозможно переместить директорию с заблокированными файлами")); } if (sourceDirectory.Exists( d => d.GetDirectories(), d => ((VFSDirectory)d).CountUsers > 0)) { return(Response.Failed("Невозможно переместить директорию, т.к. она или ее поддиректории используется другими пользователями")); } sourceDirectory.Parent.RemoveDirectory(sourceDirectory); try { destDirectory.AddDirectory(sourceDirectory); } catch (IOException) { return(Response.Failed("Файл или директория с таким именем уже существует")); } } return(Response.Success(true)); } }