Save() public method

将 inode 数据写入存储介质
public Save ( ) : void
return void
Example #1
0
        /// <summary>
        /// 添加一个文件目录项
        /// </summary>
        /// <param name="name"></param>
        /// <param name="inodeIndex"></param>
        /// <returns></returns>
        public Boolean Add(String name, INode inode)
        {
            if (Contains(name))
            {
                return(false);
            }

            entries[name] = inode.index;
            inode.data.linkCount++;
            inode.Save();

            Save();
            return(true);
        }
Example #2
0
        /// <summary>
        /// 创建一个新的 inode
        /// </summary>
        /// <param name="vfs"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public static INode Create(VFSCore vfs, UInt32 index, UInt32 flags, UInt32 owner)
        {
            if (index >= vfs.GetSuperBlock().data.inodeCapacity)
            {
                throw new Exception("无效 inode 编号");
            }

            _INode data  = new _INode(flags, owner);
            INode  inode = new INode(vfs, data, index);

            inode.Save();
            inodeInstances[index] = inode;

            return(inode);
        }
Example #3
0
        /// <summary>
        /// 删除一个目录项
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public Boolean Delete(String name)
        {
            if (!Contains(name))
            {
                return(false);
            }
            if (name == "." || name == "..")
            {
                return(false);
            }

            var inodeIndex = entries[name];

            INode inode = INode.Load(vfs, inodeIndex);

            if (inode.IsDirectory())
            {
                // 删除非空目录项:递归删除
                INodeDirectory id = INodeDirectory.Load(vfs, inodeIndex);
                if (id.Size() > 2)
                {
                    var l = id.List();
                    foreach (var pair in l)
                    {
                        id.Delete(pair.Key);
                    }
                }
            }

            inode.data.linkCount--;

            if (inode.data.linkCount == 0)
            {
                inode.Resize(0);
                vfs.DeAllocateINode(inode.index);
            }
            else
            {
                inode.Save();
            }

            entries.Remove(name);
            Save();

            return(true);
        }
Example #4
0
        /// <summary>
        /// 添加一个文件目录项
        /// </summary>
        /// <param name="name"></param>
        /// <param name="inodeIndex"></param>
        /// <returns></returns>
        public Boolean Add(String name, INode inode)
        {
            if (Contains(name))
            {
                return false;
            }

            entries[name] = inode.index;
            inode.data.linkCount++;
            inode.Save();

            Save();
            return true;
        }
Example #5
0
        /// <summary>
        /// 创建一个新的 inode
        /// </summary>
        /// <param name="vfs"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public static INode Create(VFSCore vfs, UInt32 index, UInt32 flags, UInt32 owner)
        {
            if (index >= vfs.GetSuperBlock().data.inodeCapacity)
            {
                throw new Exception("无效 inode 编号");
            }

            _INode data = new _INode(flags, owner);
            INode inode = new INode(vfs, data, index);
            inode.Save();
            inodeInstances[index] = inode;

            return inode;
        }