public static void ChangeDir(string[] args) { if (args.Length != 1) { Console.WriteLine("Wrong syntax"); return; } Inode newInode = fs.ReadInode(getLastInode(args[0])); if (newInode.Type == 2 || newInode.isCanRead(fs.currUserId, fs.currGroupId)) { CurrDirectoryInode = newInode.InodeId; if (CurrDirectoryInode == 1) { Path = "/"; return; } switch (args[0]) { case ".": break; case "..": Inode i = fs.ReadInode(getLastInode(args[0])); Path = fs.ReadDirectory(i).Сontent.FirstOrDefault(x => x.Value == CurrDirectoryInode).Key; break; default: Path = args[0].Split('/').Last(); break; } } }
public string OpenFile(uint inodeNum) { string data = ""; Inode inode = ReadInode(inodeNum); if (!inode.isCanRead(currUserId, currGroupId)) { return("Cannot read file due to insufficient permissions"); } List <uint> fileAddr = ReadFile(inode.FirstDataBlockNum); foreach (uint addr in fileAddr) { data += Encoding.GetEncoding(1251).GetString(ReadBytes(2044, (int)(Sb.Ssize * Sb.DataBlocksAddr() + Sb.Ssize * addr + 4))).Split('\0')[0]; } return(data); }