Ejemplo n.º 1
0
        private void ReplaceFilesInFolder(string newSaveLocation, PhysicalDirectoryNode physicalFs, string root)
        {
            // Loop through all directories
            foreach (var dir in physicalFs.EnumerateDirectories())
            {
                ReplaceFilesInFolder(newSaveLocation, (PhysicalDirectoryNode)physicalFs.GetDirectoryNode(dir.RelativePath), root);
            }

            // Update files of this directory
            foreach (var file in physicalFs.EnumerateFiles())
            {
                var relativeFileName = file.RelativePath;
                physicalFs.AddFile(relativeFileName);
                var openedFile = physicalFs.GetFileNode(relativeFileName).Open();

                if (!Directory.Exists(Path.Combine(newSaveLocation, Path.GetDirectoryName(relativeFileName) ?? string.Empty)))
                {
                    Directory.CreateDirectory(Path.Combine(newSaveLocation, Path.GetDirectoryName(relativeFileName) ?? string.Empty));
                }

                var createdFile = File.Create(Path.Combine(newSaveLocation, relativeFileName));
                openedFile.CopyTo(createdFile);

                createdFile.Close();
                openedFile.Close();
            }
        }
Ejemplo n.º 2
0
        public void Save(StreamInfo output, PhysicalDirectoryNode fileSystem, int versionIndex = 0)
        {
            fileSystem.AddFile("archive.data");
            var dataStream = fileSystem.GetFileNode("archive.data").Open();

            using (var bwData = new BinaryWriterX(dataStream, false))
                using (var bw = new BinaryWriterX(output.FileData, LeaveOpen))
                {
                    var header = new Header {
                        fileCount = Files.Count
                    };
                    var entries = new List <FileEntry>();

                    var offset = 0;
                    foreach (var file in Files)
                    {
                        file.FileData.CopyTo(bwData.BaseStream);
                        entries.Add(new FileEntry
                        {
                            offset     = offset,
                            size       = (int)file.FileData.Length,
                            name       = Path.GetFileName(file.FileName),
                            nameLength = Encoding.UTF8.GetByteCount(Path.GetFileName(file.FileName))
                        });

                        offset += (int)file.FileData.Length;
                    }

                    bw.WriteType(header);
                    bw.WriteMultiple(entries);
                }
        }
Ejemplo n.º 3
0
        private void SaveWithAdapter(KoreSaveInfo ksi, PhysicalDirectoryNode fs)
        {
            var kfi = ksi.Kfi;

            kfi.Adapter.LeaveOpen = false;

            var newFilename = string.IsNullOrEmpty(ksi.NewSaveFile) ? Path.GetFileName(kfi.StreamFileInfo.FileName) : Path.GetFileName(ksi.NewSaveFile);

            fs.AddFile(newFilename);
            var fileNode   = fs.GetFileNode(newFilename);
            var streamInfo = new StreamInfo
            {
                FileData = fileNode.Open(),
                FileName = newFilename
            };

            (kfi.Adapter as ISaveFiles)?.Save(streamInfo, fs, ksi.Version);

            if (streamInfo.FileData.CanRead)
            {
                streamInfo.FileData.Dispose();
            }
        }