private VirtualDirectory LoadDirectory()
        {
            var dir = VirtualDirectoryCommon.FindById(_dirId, QueryLevel.Single);

            if (dir.IsEmpty())
            {
                throw new BusinessException(string.Format(Strings.NotFoundVirtualDirectory, _dirId));
            }
            return(dir);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 5
0
        //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); //删除文件
                }
            }
        }
Exemplo n.º 6
0
 /// <summary>
 /// 高效的获得直系子目录的个数
 /// </summary>
 /// <returns></returns>
 public int GetChildCountSlim()
 {
     return(VirtualDirectoryCommon.GetChildCount(this.Id));
 }