예제 #1
0
        public void SavePakFile(string path)
        {
            using (var inputFileStream = File.Open(LoadedFilePath, FileMode.Open))
            {
                using (var reader = new PakBinaryReader(inputFileStream))
                {
                    using (var outputFileStream = File.Open(path, FileMode.Create))
                    {
                        using (var writer = new PakBinaryWriter(outputFileStream))
                        {
                            long currentSize = 0;
                            long totalSize   = Model.Archive.Directory.Entries.Sum(_ => _.UncompressedSize);

                            for (var i = 0; i < Model.Archive.Directory.Entries.Count; i++)
                            {
                                var entry = Model.Archive.Directory.Entries[i];

                                Model.SaveDataEntry(reader, writer, entry, Padding && i + 1 != Model.Archive.Directory.Entries.Count);
                                CurrentProgress = (int)(currentSize * 100.0 / totalSize);
                                CurrentFile     = entry.Name;
                                currentSize    += entry.UncompressedSize;
                            }

                            Model.SavePakFileStructure(writer);
                        }
                    }
                }
            }

            OnPropertyChanged("Model");
        }
예제 #2
0
        public void CreateNewPak(string directory, string targetPath)
        {
            var entries = new List <PakEntry>();

            foreach (string file in Directory.GetFiles(directory, "*", SearchOption.AllDirectories))
            {
                string[] tokens = file.Split(new string[] { directory + @"\" }, StringSplitOptions.RemoveEmptyEntries);
                foreach (string token in tokens)
                {
                    if (!string.IsNullOrWhiteSpace(token))
                    {
                        string result       = token.Replace(@"\", @"/");
                        var    currentEntry = new PakEntry
                        {
                            Name             = result,
                            Import           = file,
                            UncompressedSize = new FileInfo(file).Length,
                            CompressedSize   = new FileInfo(file).Length,
                            CompressionType  = 0,
                            EncryptionType   = 0,
                        };

                        entries.Add(currentEntry);
                    }
                }
            }

            Model.CreateNewPakFile(MountPoint, entries, Version);

            using (var outputFileStream = File.Open(targetPath, FileMode.Create))
            {
                using (var writer = new PakBinaryWriter(outputFileStream))
                {
                    long currentSize = 0;
                    long totalSize   = Model.Archive.Directory.Entries.Sum(_ => _.UncompressedSize);

                    for (var i = 0; i < Model.Archive.Directory.Entries.Count; i++)
                    {
                        var entry = Model.Archive.Directory.Entries[i];

                        Model.CreateDataEntry(writer, entry, Padding && i + 1 != Model.Archive.Directory.Entries.Count);
                        CurrentProgress = (int)(currentSize * 100.0 / totalSize);
                        CurrentFile     = entry.Name;
                        currentSize    += entry.UncompressedSize;
                    }

                    Model.SavePakFileStructure(writer);
                }
            }
        }