/// <summary> /// Загрузка метаданных /// </summary> void LoadFile() { string fname = Parent.FullPath + "/" + META_FILE_NAME; if (File.Exists(fname)) { // Чтение чанкового файла ChunkedFile cf = new ChunkedFile(fname); if (!cf.Root.Name.StartsWith("SBMeta")) { return; } // Чанки с данными fileData = new Dictionary <string, byte[]>(); foreach (ChunkedFile.Chunk ch in cf.Root.Children) { ChunkedFile.ContainerChunk cont = ch as ChunkedFile.ContainerChunk; // Чтение имени и данных string name = Encoding.Unicode.GetString((cont.Children[0] as ChunkedFile.DataChunk).Data); byte[] data = (cont.Children[1] as ChunkedFile.DataChunk).Data; // Сохранение fileData.Add(name.ToLower(), data); } } }
/// <summary> /// Сохранение файла /// </summary> void SaveFile() { if (fileData != null) { string fname = Parent.FullPath + "/" + META_FILE_NAME; if (File.Exists(fname)) { File.Delete(fname); } // Выход если файлов нет if (fileData.Count == 0) { return; } // Запись данных ChunkedFile ch = new ChunkedFile(); ch.Root.Name = "SBMeta1"; // Сохранение файлов foreach (KeyValuePair <string, byte[]> b in fileData) { ChunkedFile.ContainerChunk cont = new ChunkedFile.ContainerChunk(); // Запись имени и файла cont.Children.AddRange(new ChunkedFile.Chunk[] { new ChunkedFile.DataChunk("FileNam", Encoding.Unicode.GetBytes(b.Key)), new ChunkedFile.DataChunk("RawData", b.Value) }); ch.Root.Children.Add(cont); } // Запись файла ch.Save(fname); File.SetAttributes(fname, FileAttributes.Hidden); } }