예제 #1
0
        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);
        }
예제 #2
0
        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;
        }