public IBigFileFolderInfo[] ReadFolderInfos(Stream stream, ref BigFileSegmentHeader segmentHeader, ref BigFileHeaderStruct header) { if (version == null) { throw new NullReferenceException("Version cannot be null!"); } log.Info("Reading big file folders, count: {0}", header.Folders); BigFileVersions.DebugLogVersion(version, log); diag.StartStopwatch(); IBigFileFolderInfo[] infos = new IBigFileFolderInfo[header.Folders]; IBigFileFolderInfo tmpInfo = version.CreateFolderInfo(); int folderOffset = BigFileUtil.CalculateFolderOffset(version, ref segmentHeader, ref header); byte[] buffer = buffers[tmpInfo.StructSize]; stream.Seek(folderOffset, SeekOrigin.Begin); for (short i = 0; i < header.Folders; i++) { stream.Read(buffer, 0, tmpInfo.StructSize); infos[i] = tmpInfo.FromBytes(buffer); infos[i].DebugLog(log); } log.Info("Folder infos read! Time taken: {0}ms", diag.StopwatchTime); return(infos); }
public IBigFileFileInfo[] ReadFileInfos(Stream stream, ref BigFileSegmentHeader segmentHeader, ref BigFileHeaderStruct header) { if (version == null) { throw new NullReferenceException("Version cannot be null!"); } log.Info("Reading big file file infos, count: {0}", header.Files); BigFileVersions.DebugLogVersion(version, log); diag.StartStopwatch(); IBigFileFileInfo[] infos = new IBigFileFileInfo[header.Files]; IBigFileFileInfo tmpInfo = version.CreateFileInfo(); int fileOffset = segmentHeader.InfoOffset + header.StructSize; log.Debug("File info offset: {0:X8}", fileOffset); byte[] buffer = buffers[tmpInfo.StructSize]; stream.Seek(fileOffset, SeekOrigin.Begin); for (int i = 0; i < header.Files; i++) { stream.Read(buffer, 0, tmpInfo.StructSize); infos[i] = tmpInfo.FromBytes(buffer); infos[i].DebugLog(log); } log.Info("File infos read! Time taken: {0}ms", diag.StopwatchTime); log.Info("File count: {0}", header.Files); return(infos); }
public override void LoadFromDisk() { status.stopwatch.Reset(); status.stopwatch.Start(); status.UpdateProgress(0f); log.Info("Loading unpacked bigfile from disk..."); UnpackedFileKeyMappingFile mappingFile = new UnpackedFileKeyMappingFile(new DirectoryInfo(fileOrDirectory)); renamedMapping = mappingFile.LoadMappingData(); status.UpdateProgress(0.2f); SegmentHeader = segment.ReadSegmentHeader(); FileHeader = header.ReadHeader(ref SegmentHeader); log.Info(string.Format("Count info offset: {0:X8}", SegmentHeader.InfoOffset)); version = BigFileVersions.GetVersion(FileHeader.BigFileVersion); fileUtil.BigFileVersion = version; filesAndFolders.Version = version; log.Info(string.Format("Version: {0:X4}", FileHeader.BigFileVersion)); rawFolderInfos = filesAndFolders.ReadFolderInfos(ref SegmentHeader, ref FileHeader); rawFileInfos = filesAndFolders.ReadFileInfos(ref SegmentHeader, ref FileHeader); fileUtil.BigFileVersion = version; filesAndFolders.Version = version; status.UpdateProgress(0.4f); rootFolder = fileUtil.CreateRootFolderTree(rawFolderInfos); fileMap = fileUtil.CreateFileMappingData(rootFolder, rawFileInfos); fileUtil.MapFilesToFolders(rootFolder, fileMap); UnpackedFolderMapAndFilesList folderAndFiles = fileUtil.CreateFolderTreeAndFilesListFromDirectory(new DirectoryInfo(directory.FullName + "\\" + BigFileConst.UNPACK_DIR), renamedMapping, fileMap); rootFolder = folderAndFiles.folderMap[0]; rawFileInfos = folderAndFiles.filesList; rawFolderInfos = folderAndFiles.foldersList; status.UpdateProgress(0.6f); fileMap = fileUtil.CreateFileMappingData(folderAndFiles.folderMap[0], folderAndFiles.filesList); status.UpdateProgress(0.8f); fileUtil.MapFilesToFolders(rootFolder, fileMap); status.UpdateProgress(1.0f); status.stopwatch.Stop(); log.Info("Unpacked bigfile loaded!"); log.Info(" Time taken: " + status.TimeTaken + "ms"); }
public override void LoadFromDisk() { status.stopwatch.Reset(); status.stopwatch.Start(); status.UpdateProgress(0f); log.Info("Loading big file into memory: " + fileInfo.FullName); SegmentHeader = segment.ReadSegmentHeader(); FileHeader = header.ReadHeader(ref SegmentHeader); log.Info("Header and count info read"); version = BigFileVersions.GetVersion(FileHeader.BigFileVersion); status.UpdateProgress(0.2f); fileUtil.BigFileVersion = version; filesAndFolders.Version = version; log.Info(string.Format("Version: {0:X4}", FileHeader.BigFileVersion)); log.Info(string.Format("Data Offset: {0:X4}", fileUtil.CalculateDataOffset(ref SegmentHeader, ref FileHeader))); rawFolderInfos = filesAndFolders.ReadFolderInfos(ref SegmentHeader, ref FileHeader); rawFileInfos = filesAndFolders.ReadFileInfos(ref SegmentHeader, ref FileHeader); log.Info("Creating folder tree and file mappings..."); status.UpdateProgress(0.4f); rootFolder = fileUtil.CreateRootFolderTree(rawFolderInfos); status.UpdateProgress(0.6f); fileMap = fileUtil.CreateFileMappingData(rootFolder, rawFileInfos); status.UpdateProgress(0.8f); fileUtil.MapFilesToFolders(rootFolder, fileMap); status.UpdateProgress(1f); status.stopwatch.Stop(); log.Info("Bigfile loaded!"); fileUtil.diagData.DebugLog(log); log.Info("Time taken: " + status.TimeTaken + "ms"); }