private VirtualDirectory LoadDirectory() { var dir = VirtualDirectoryCommon.FindById(_dirId, QueryLevel.Single); if (dir.IsEmpty()) { throw new BusinessException(string.Format(Strings.NotFoundVirtualDirectory, _dirId)); } return(dir); }
private VirtualDirectory GetDirectory() { var directory = VirtualDirectoryCommon.FindById(_directoryId, QueryLevel.Mirroring); if (directory.IsEmpty()) { throw new BusinessException(string.Format(Strings.NotFoundVirtualDirectory, _directoryId)); } return(directory); }
private void SetParent(VirtualDirectory dir) { if (_parentId != Guid.Empty) { var parent = VirtualDirectoryCommon.FindById(_parentId, QueryLevel.Mirroring); if (!parent.IsEmpty()) { dir.Parent = parent; } } }
protected override void ExecuteProcedure() { var disk = VirtualDiskCommon.LoadByMirroring(_diskId); VirtualDirectory dir = VirtualDirectoryCommon.FindById(_dirId, QueryLevel.Mirroring); //这里需要测试,dir内部的this.Disk和 disk要是同一个对象,在当前会话里都是同一个镜像 //if(ReferenceEquals(disk, dir.Disk)) //{ //} if (dir.IsSystem && !_force) { throw new BusinessException(Strings.CanNotDeleteSystemDirectory); } disk.Delete(dir); VirtualDiskCommon.Update(disk); }
//private List<VirtualFile> FriendFiles //{ // get // { // return GetValue<List<VirtualFile>>(FilesProperty); // } //} //public ReadOnlyCollection<VirtualFile> Files //{ // get // { // return this.FriendFiles.AsReadOnly(); // } //} #region 清理目录 private void Clear() { //获取子目录(以镜像的方式),不包括孙级 var childs = VirtualDirectoryCommon.FindChilds(this.Id, QueryLevel.Mirroring); foreach (var child in childs) { this.Disk.Delete(child); //删除子目录 } while (true) { var files = GetFiles(10);//使用查询方式,可以及时清理内存;没有锁定文件,因为经过分析后,发现增、删、改、转移这4项操作,不会与此处发生严重的并发冲突,不会导致有脏数据 if (files.Count() == 0) { break; } foreach (var file in files) { this.Disk.Delete(file); //删除文件 } } }
/// <summary> /// 高效的获得直系子目录的个数 /// </summary> /// <returns></returns> public int GetChildCountSlim() { return(VirtualDirectoryCommon.GetChildCount(this.Id)); }