Exemple #1
0
        public void MapFile()
        {
            _directories.Clear();
            _files.Clear();

            using (BinaryReader binReader = new BinaryReader(_fileStream, new UTF8Encoding(), true))
            {
                binReader.BaseStream.Seek(0, SeekOrigin.Begin);
                while (_fileLength != binReader.BaseStream.Position)
                {
                    long fileOffset = binReader.BaseStream.Position;
                    long dataOffset = fileOffset + SizeOfHeader;
                    ParseHeaderData(binReader, SizeOfHeader, out PackType packType, out uint dataLength);

                    switch (packType)
                    {
                    case PackType.PDir:
                        ParsePDir(binReader, dataLength, fileOffset, dataOffset);
                        break;

                    case PackType.File:
                        ParseFilePointer(binReader, dataLength, fileOffset, dataOffset);
                        break;

                    default:
                        binReader.SkipBytes(dataLength - SizeOfHeader);
                        break;
                    }
                }
            }
            _root = GetTreeWithRoot();
        }
Exemple #2
0
 public static void PrintTree(FileDirectoryTree root, int dep)
 {
     sb.AppendFormat("{0}>{1}\n", new string('\t', dep), root.DirectoryName);
     foreach (FilePointer filePointer in root.Files)
     {
         sb.AppendFormat("{0}{1}\n", new string('\t', dep + 1), filePointer.Name);
     }
     foreach (FileDirectoryTree item in root.Directories)
     {
         PrintTree(item, dep + 1);
     }
 }
Exemple #3
0
        public static void UnpackAll(FileDirectoryTree root, string path)
        {
            foreach (FilePointer filePointer in root.Files)
            {
                if (!filePointer.Name.EndsWith(".dat"))
                {
                    continue;
                }

                var buf = kk.GetFileContentBytes(filePointer);
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                File.WriteAllBytes(path + "/" + filePointer.Name, buf);
            }
            foreach (FileDirectoryTree item in root.Directories)
            {
                UnpackAll(item, path + "/" + item.DirectoryName);
            }
        }