/// <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); }
/// <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); }
/// <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); }
/// <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; }
/// <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; }