Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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");
        }
Example #4
0
        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");
        }