/// <summary> /// Чтение чанка из файла /// </summary> /// <param name="f">Поток откуда читать</param> public override void Read(BinaryReader f, uint size) { Children.Clear(); uint quota = 0; while (quota < size) { Chunk c; // Чтение данных string nm = f.ReadConstantString(7); ChunkType ct = (ChunkType)f.ReadByte(); uint sz = f.ReadUInt32(); // Создание чанка if (ct == ChunkType.RawDataChunk) { c = new DataChunk(nm); } else if (ct == ChunkType.KeyValueChunk) { c = new KeyValueChunk(nm); } else { c = new ContainerChunk(nm); } // Читаем содержимое c.Read(f, sz); // Увеличиваем квоту quota += 12 + c.Size; } }
/// <summary> /// Чтение файла /// </summary> /// <param name="path">Полный путь до файла</param> public ChunkedFile(string path) { BinaryReader f = new BinaryReader(new FileStream(path, FileMode.Open, FileAccess.Read)); // Читаем основной чанк string name = f.ReadConstantString(7); f.BaseStream.Position++; uint sz = f.ReadUInt32(); Root = new ContainerChunk(name); Root.Read(f, sz); f.Close(); }
/// <summary> /// Чтение файла /// </summary> /// <param name="path">Полный путь до файла</param> public ChunkedFile(string path) { FileName = path; BinaryReader f = new BinaryReader(new MemoryStream(FileSystem.Read(path))); // Читаем основной чанк if (f.BaseStream.Length >= 12) { string name = f.ReadConstantString(7); f.BaseStream.Position++; uint sz = f.ReadUInt32(); Root = new ContainerChunk(name); Root.Read(f, sz); } else { Root = new ContainerChunk(""); } f.Close(); }
/// <summary> /// Создание пустого файла /// </summary> public ChunkedFile() { Root = new ContainerChunk(); }