public static UserRights FromBytes(byte[] bytes) { if (bytes.Length != SizeInBytes) { throw new ArgumentException("Число байт не верно.", nameof(bytes)); } var res = new UserRights(); using (var ms = new MemoryStream(bytes)) { // скобочки - для разграничения области видимости. Потому что мне каждый раз нужен новый буфер. { byte[] buffer = new byte[2]; ms.Read(buffer, 0, buffer.Length); res.UserId = BitConverter.ToInt16(buffer, 0); } { byte[] buffer = new byte[2]; ms.Read(buffer, 0, buffer.Length); res.Rights = BitConverter.ToInt16(buffer, 0); } } return(res); }
public byte[] Data; // все, что останется от 1 КБ. 1024-237 = MFTRecord.SpaceForData public MFTRecord(int index, string fileName, string path, FileType fileType, int dataUnitSize, DateTime time_Creation, DateTime time_Modification, byte flags, UserRights ownerRights, byte[] data = null, bool isNotInMFT = false) // без / и с / в конце. Если нет - добавлю. { Index = index; //OwnerId = FS.RootId; IsFileExists = true; FileSize = 0; IsNotInMFT = isNotInMFT; Flags = flags; if (data != null) { // Надеюсь, я не додумаюсь СОЗДАТЬ файл с >MFTRecord.SpaceForData байт. if (data.Length > MFTRecord.SpaceForData) { throw new ArgumentException("Слишком большая длина data для создания записи MFT", nameof(data)); } Data = data.TrimOrExpandTo(SpaceForData); } else { Data = new byte[MFTRecord.SpaceForData]; FileSize = 0; } if (fileName == null) { throw new ArgumentNullException(nameof(fileName)); } if (path == null) { throw new ArgumentNullException(nameof(path)); } if (dataUnitSize == 0) { throw new ArgumentException("Упс, размер единицы данных не может быть 0 (иначе будет бесконечное чтение)", nameof(dataUnitSize)); } FileName = Encoding.ASCII.GetBytes(fileName); if (FileName.Length != 50) { FileName = FileName.TrimOrExpandTo(50); } if (path != "") { if (path.Last() != '/') { path = path + '/'; } } Path = Encoding.ASCII.GetBytes(path); if (Path.Length > 206) { throw new ArgumentException("Упс, путь слишком длииинный", nameof(path)); } if (Path.Length < 206) { Path = Path.TrimOrExpandTo(206); } FileType = fileType; DataUnitSize = dataUnitSize; Time_Creation = time_Creation.ToLong(); Time_Modification = time_Modification.ToLong(); OwnerRights = ownerRights; }