public void SaveFileFormat() { if (FileFormat != null && FileFormat.CanSave) { if (FileDataStream != null) { Console.WriteLine($"Updating FileDataStream " + (FileDataStream is FileStream)); if (FileDataStream is FileStream) { FileDataStream.Close(); } var mem = new System.IO.MemoryStream(); FileFormat.Save(mem); FileDataStream = mem; //Reload file data FileFormat.Load(FileDataStream); } else { var mem = new System.IO.MemoryStream(); FileFormat.Save(mem); FileData = STLibraryCompression.CompressFile(mem.ToArray(), FileFormat); } } }
/// <summary> /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName"> /// </summary> /// <param name="IFileFormat">The format instance of the file being saved</param> /// <param name="FileName">The name of the file</param> /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param> /// <param name="EnableDialog">Toggle for showing compression dialog</param> /// <returns></returns> public static void SaveFileFormat(IFileFormat FileFormat, string FileName, bool EnableDialog = true, string DetailsLog = "") { //These always get created on loading a file,however not on creating a new file if (FileFormat.IFileInfo == null) { throw new System.NotImplementedException("Make sure to impliment a IFileInfo instance if a format is being created!"); } Cursor.Current = Cursors.WaitCursor; FileFormat.FilePath = FileName; byte[] data = FileFormat.Save(); FileFormat.IFileInfo.DecompressedSize = (uint)data.Length; data = CompressFileFormat(data, FileFormat.IFileInfo.FileIsCompressed, FileFormat.IFileInfo.Alignment, FileFormat.IFileInfo.CompressionType, FileName, EnableDialog); FileFormat.IFileInfo.CompressedSize = (uint)data.Length; File.WriteAllBytes(FileName, data); DetailsLog += "\n" + SatisfyFileTables(FileFormat, FileName, data, FileFormat.IFileInfo.DecompressedSize, FileFormat.IFileInfo.CompressedSize, FileFormat.IFileInfo.FileIsCompressed); MessageBox.Show($"File has been saved to {FileName}", "Save Notification"); // STSaveLogDialog.Show($"File has been saved to {FileName}", "Save Notification", DetailsLog); Cursor.Current = Cursors.Default; }
public byte[] Save() { Console.WriteLine("Saving sarc"); sarcData.Files.Clear(); foreach (TreeNode node in Collect(Nodes)) { if (node is SarcEntry) { Console.WriteLine("Saving " + node); SaveFileEntryData((SarcEntry)node); } else if (node is IFileFormat && node != this) { IFileFormat fileFormat = (IFileFormat)node; if (fileFormat != null && ((IFileFormat)node).CanSave) { sarcData.Files.Add(SetSarcPath(node, this), STLibraryCompression.CompressFile(fileFormat.Save(), fileFormat)); } else { sarcData.Files.Add(SetSarcPath(node, this), STLibraryCompression.CompressFile(OpenedFiles[node.FullPath], fileFormat)); } } } Tuple <int, byte[]> sarc = SARCExt.SARC.PackN(sarcData); IFileInfo.Alignment = sarc.Item1; return(sarc.Item2); }
public byte[] Save() { beaFile.FileList.Clear(); beaFile.FileDictionary.Clear(); foreach (TreeNode node in Collect(Nodes)) { if (node is TreeNodeFile && node != this) { IFileFormat fileFormat = (IFileFormat)node; if (fileFormat != null && fileFormat.CanSave) { byte[] uncomrompressedData = new byte[0]; //Save any active files in the editor if supported if (fileFormat.CanSave) { uncomrompressedData = fileFormat.Save(); } //Create a new asset entry ASST asset = new ASST(); asset.unk = 2; asset.unk2 = 2; asset.UncompressedSize = uncomrompressedData.LongLength; if (fileFormat.IFileInfo.FileIsCompressed) { asset.FileData = STLibraryCompression.ZSTD.Compress(uncomrompressedData); } else { asset.FileData = uncomrompressedData; } asset.FileName = fileFormat.FilePath; beaFile.FileList.Add(fileFormat.FilePath, asset); beaFile.FileDictionary.Add(fileFormat.FilePath); } } else if (node is FileEntry) { ASST asset = new ASST(); asset.unk = ((FileEntry)node).unk1; asset.unk2 = ((FileEntry)node).unk2; asset.FileName = ((FileEntry)node).FullName; asset.FileData = ((FileEntry)node).data; byte[] uncomp = GetASSTData((FileEntry)node); asset.UncompressedSize = uncomp.Length; beaFile.FileList.Add(asset.FileName, asset); beaFile.FileDictionary.Add(asset.FileName); } } MemoryStream mem = new MemoryStream(); beaFile.Save(mem); return(mem.ToArray()); }
public bool Save() { if (mFileName == null || mBuffer == null || mFormat == null) { return(false); } mFormat.Save(mFileName, mBuffer); return(true); }
/// <summary> /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName"> /// </summary> /// <param name="IFileFormat">The format instance of the file being saved</param> /// <param name="FileName">The name of the file</param> /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param> /// <param name="EnableDialog">Toggle for showing compression dialog</param> /// <returns></returns> public static void SaveFileFormat(IFileFormat FileFormat, string FileName, bool EnableDialog = true) { Cursor.Current = Cursors.WaitCursor; FileFormat.FilePath = FileName; SaveFileFormat(FileFormat.Save(), FileFormat.IFileInfo.FileIsCompressed, FileFormat.IFileInfo.Alignment, FileFormat.IFileInfo.CompressionType, FileName, EnableDialog); }
public void SaveFileFormat() { if (FileFormat != null && FileFormat.CanSave) { var mem = new System.IO.MemoryStream(); FileFormat.Save(mem); FileData = CompressData(new MemoryStream(mem.ToArray())); //FileFormat.Load(FileData); } }
public static void SaveFileFormat(ArchiveFileInfo archiveFile, IFileFormat fileFormat) { if (fileFormat != null && fileFormat.CanSave) { if (archiveFile.FileDataStream != null) { var mem = new System.IO.MemoryStream(); fileFormat.Save(mem); archiveFile.FileDataStream = mem; //Reload file data fileFormat.Load(archiveFile.FileDataStream); } else { var mem = new System.IO.MemoryStream(); fileFormat.Save(mem); archiveFile.FileData = STLibraryCompression.CompressFile(mem.ToArray(), fileFormat); } } }
public void SaveFileFormat() { if (FileFormat != null && FileFormat.CanSave) { if (FileDataStream != null) { var mem = new System.IO.MemoryStream(); FileFormat.Save(mem); FileDataStream = mem; //Reload file data FileFormat.Load(FileDataStream); } else { var mem = new System.IO.MemoryStream(); FileFormat.Save(mem); FileData = STLibraryCompression.CompressFile(mem.ToArray(), FileFormat); } } }
private void SaveFileEntryData(FileEntry entry) { IFileFormat file = entry.FileHandle; if (beaFile.FileList.ContainsKey(entry.FullName)) { if (file.CanSave) { SetASST(file.Save(), entry.FullName); } } }
public void SaveFile(IFileFormat format, string FileName) { byte[] data = format.Save(); int Alignment = 0; if (format.IFileInfo != null) { Alignment = format.IFileInfo.Alignment; } SaveCompressFile(data, FileName, Alignment); }
private void FormClosing(object sender, EventArgs args, IFileFormat fileFormat) { if (((Form)sender).DialogResult != DialogResult.OK) { return; } if (fileFormat.CanSave) { Data = fileFormat.Save(); UpdateHexView(); } }
/// <summary> /// Saves the <see cref="IFileFormat"/> into the given stream. /// </summary> /// <param name="fileFormat"></param> /// <param name="stream"></param> /// <returns></returns> public static Stream SaveFileFormat(IFileFormat fileFormat) { // SaveLog log = new SaveLog(); MemoryStream mem = new MemoryStream(); fileFormat.Save(mem); if (fileFormat.FileInfo.Compression != null) { return(CompressFile(mem, fileFormat)); } return(mem); }
public void Write(FileWriter writer) { if (FileHandler != null && FileHandler.CanSave) { data = FileHandler.Save(); } CompressedData = Compress(data, CompressionType); writer.Write((ushort)unkown); writer.Write((ushort)CompressionType); writer.Write(data.Length); writer.Write(CompressedData.Length); writer.Write(0); DataOffset = writer.Position; writer.Write(0L); }
/// <summary> /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName"> /// </summary> /// <param name="IFileFormat">The format instance of the file being saved</param> /// <param name="FileName">The name of the file</param> /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param> /// <param name="EnableDialog">Toggle for showing compression dialog</param> /// <returns></returns> public static void SaveFileFormat(IFileFormat FileFormat, string FileName, int Alignment = 0, bool EnableDialog = true) { Cursor.Current = Cursors.WaitCursor; byte[] data = FileFormat.Save(); if (EnableDialog && FileFormat.FileIsCompressed) { DialogResult save = MessageBox.Show($"Compress file with {FileFormat.CompressionType}?", "File Save", MessageBoxButtons.YesNo); if (save == DialogResult.Yes) { switch (FileFormat.CompressionType) { case CompressionType.Yaz0: data = EveryFileExplorer.YAZ0.Compress(data, Runtime.Yaz0CompressionLevel, (uint)Alignment); break; case CompressionType.Zstb: data = STLibraryCompression.ZSTD.Compress(data); break; case CompressionType.Lz4: data = STLibraryCompression.Type_LZ4.Compress(data); break; case CompressionType.Lz4f: data = STLibraryCompression.Type_LZ4.Compress(data); break; case CompressionType.Gzip: data = STLibraryCompression.GZIP.Compress(data); break; default: MessageBox.Show($"Compression Type {FileFormat.CompressionType} not supported!!"); break; } } } File.WriteAllBytes(FileName, data); Cursor.Current = Cursors.Default; MessageBox.Show($"File has been saved to {FileName}"); }
private void OpenFormDialog(IFileFormat fileFormat) { UserControl form = GetEditorForm(fileFormat); form.Text = (((IFileFormat)fileFormat).FileName); var parentForm = LibraryGUI.Instance.GetActiveForm(); GenericEditorForm editorForm = new GenericEditorForm(true, form); editorForm.FormClosing += (sender, e) => FormClosing(sender, e, fileFormat); if (editorForm.ShowDialog() == DialogResult.OK) { if (fileFormat.CanSave) { Data = fileFormat.Save(); UpdateHexView(); } } }
private void OpenFormDialog(IFileFormat fileFormat) { Type objectType = fileFormat.GetType(); foreach (var inter in objectType.GetInterfaces()) { if (inter.IsGenericType && inter.GetGenericTypeDefinition() == typeof(IEditor <>)) { System.Reflection.MethodInfo method = objectType.GetMethod("OpenForm"); var form = (STForm)method.Invoke(fileFormat, new object[0]); form.Text = (((IFileFormat)fileFormat).FileName); if (form.ShowDialog() == DialogResult.OK) { if (fileFormat.CanSave) { Data = fileFormat.Save(); UpdateHexView(); } } } } }
private void OpenFormDialog(IFileFormat fileFormat) { UserControl form = GetEditorForm(fileFormat); form.Text = (((IFileFormat)fileFormat).FileName); var parentForm = LibraryGUI.GetActiveForm(); GenericEditorForm editorForm = new GenericEditorForm(true, form); editorForm.FormClosing += (sender, e) => FormClosing(sender, e, fileFormat); if (editorForm.ShowDialog() == DialogResult.OK) { if (fileFormat.CanSave) { var mem = new System.IO.MemoryStream(); fileFormat.Save(mem); ArchiveFileInfo.FileData = mem.ToArray(); UpdateEditor(); } } }
/// <summary> /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName"> /// </summary> /// <param name="IFileFormat">The format instance of the file being saved</param> /// <param name="FileName">The name of the file</param> /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param> /// <param name="EnableDialog">Toggle for showing compression dialog</param> /// <returns></returns> public static void SaveFileFormat(IFileFormat FileFormat, string FileName, bool EnableDialog = true, string DetailsLog = "") { //These always get created on loading a file,however not on creating a new file if (FileFormat.IFileInfo == null) { throw new System.NotImplementedException("Make sure to impliment a IFileInfo instance if a format is being created!"); } Cursor.Current = Cursors.WaitCursor; FileFormat.FilePath = FileName; if (FileFormat.IFileInfo.FileIsCompressed || FileFormat.IFileInfo.InArchive) { //Todo find more optmial way to handle memory with files in archives //Also make compression require streams var mem = new System.IO.MemoryStream(); FileFormat.Save(mem); byte[] data = mem.ToArray(); FileFormat.IFileInfo.DecompressedSize = (uint)data.Length; data = CompressFileFormat(data, FileFormat.IFileInfo.FileIsCompressed, FileFormat.IFileInfo.Alignment, FileFormat.IFileInfo.CompressionType, FileName, EnableDialog); FileFormat.IFileInfo.CompressedSize = (uint)data.Length; File.WriteAllBytes(FileName, data); DetailsLog += "\n" + SatisfyFileTables(FileFormat, FileName, data, FileFormat.IFileInfo.DecompressedSize, FileFormat.IFileInfo.CompressedSize, FileFormat.IFileInfo.FileIsCompressed); } else { //Check if a stream is active and the file is beinng saved to the same opened file if (FileFormat is ISaveOpenedFileStream && FileFormat.FilePath == FileName && File.Exists(FileName)) { string savedPath = Path.GetDirectoryName(FileName); string tempPath = Path.Combine(savedPath, "tempST.bin"); //Save a temporary file first to not disturb the opened file using (var fileStream = new FileStream(tempPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { FileFormat.Save(fileStream); //After saving is done remove the existing file File.Delete(FileName); //Now move and rename our temp file to the new file path File.Move(tempPath, FileName); } } else { using (var fileStream = new FileStream(FileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { FileFormat.Save(fileStream); } } } MessageBox.Show($"File has been saved to {FileName}", "Save Notification"); // STSaveLogDialog.Show($"File has been saved to {FileName}", "Save Notification", DetailsLog); Cursor.Current = Cursors.Default; }
/// <summary> /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName"> /// </summary> /// <param name="IFileFormat">The format instance of the file being saved</param> /// <param name="FileName">The name of the file</param> /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param> /// <param name="EnableDialog">Toggle for showing compression dialog</param> /// <returns></returns> public static void SaveFileFormat(IFileFormat FileFormat, string FileName, bool EnableDialog = true, string DetailsLog = "") { //These always get created on loading a file,however not on creating a new file if (FileFormat.IFileInfo == null) throw new System.NotImplementedException("Make sure to impliment a IFileInfo instance if a format is being created!"); Cursor.Current = Cursors.WaitCursor; FileFormat.FilePath = FileName; string compressionLog = ""; if (FileFormat.IFileInfo.FileIsCompressed || FileFormat.IFileInfo.InArchive || Path.GetExtension(FileName) == ".szs" || Path.GetExtension(FileName) == ".sbfres") { //Todo find more optmial way to handle memory with files in archives //Also make compression require streams var mem = new System.IO.MemoryStream(); FileFormat.Save(mem); mem = new System.IO.MemoryStream(mem.ToArray()); FileFormat.IFileInfo.DecompressedSize = (uint)mem.Length; var finalStream = CompressFileFormat( FileFormat.IFileInfo.FileCompression, mem, FileFormat.IFileInfo.FileIsCompressed, FileFormat.IFileInfo.Alignment, FileName, EnableDialog); compressionLog = finalStream.Item2; Stream compressionStream = finalStream.Item1; FileFormat.IFileInfo.CompressedSize = (uint)compressionStream.Length; compressionStream.ExportToFile(FileName); DetailsLog += "\n" + SatisfyFileTables(FileFormat, FileName, compressionStream, FileFormat.IFileInfo.DecompressedSize, FileFormat.IFileInfo.CompressedSize, FileFormat.IFileInfo.FileIsCompressed); compressionStream.Flush(); compressionStream.Close(); } else { //Check if a stream is active and the file is beinng saved to the same opened file if (FileFormat is ISaveOpenedFileStream && FileFormat.FilePath == FileName && File.Exists(FileName)) { string savedPath = Path.GetDirectoryName(FileName); string tempPath = Path.Combine(savedPath, "tempST.bin"); //Save a temporary file first to not disturb the opened file using (var fileStream = new FileStream(tempPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { FileFormat.Save(fileStream); FileFormat.Unload(); //After saving is done remove the existing file File.Delete(FileName); //Now move and rename our temp file to the new file path File.Move(tempPath, FileName); FileFormat.Load(File.OpenRead(FileName)); var activeForm = LibraryGUI.GetActiveForm(); if (activeForm != null && activeForm is ObjectEditor) ((ObjectEditor)activeForm).ReloadArchiveFile(FileFormat); } } else { using (var fileStream = new FileStream(FileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { FileFormat.Save(fileStream); } } } if (compressionLog != string.Empty) MessageBox.Show($"File has been saved to {FileName}. Compressed time: {compressionLog}", "Save Notification"); else MessageBox.Show($"File has been saved to {FileName}", "Save Notification"); // STSaveLogDialog.Show($"File has been saved to {FileName}", "Save Notification", DetailsLog); Cursor.Current = Cursors.Default; }
/// <summary> /// Saves the <see cref="IFileFormat"/> as a file from the given <param name="FileName"> /// </summary> /// <param name="IFileFormat">The format instance of the file being saved</param> /// <param name="FileName">The name of the file</param> /// <param name="Alignment">The Alignment used for compression. Used for Yaz0 compression type. </param> /// <returns></returns> public static SaveLog SaveFileFormat(IFileFormat fileFormat, string fileName) { SaveLog log = new SaveLog(); Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); fileFormat.FileInfo.FilePath = fileName; if (fileFormat.FileInfo.KeepOpen && File.Exists(fileName)) { string savedPath = Path.GetDirectoryName(fileName); string tempPath = Path.Combine(savedPath, "tempST.bin"); //Save a temporary file first to not disturb the opened file using (var fileStream = new FileStream(tempPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { fileFormat.Save(fileStream); if (fileFormat.FileInfo.Compression != null) { // Stream comp = CompressFile(File.OpenRead(tempPath), fileFormat); //fileStream.CopyTo(comp); } if (fileFormat is IDisposable) { ((IDisposable)fileFormat).Dispose(); } //After saving is done remove the existing file File.Delete(fileName); //Now move and rename our temp file to the new file path File.Move(tempPath, fileName); fileFormat.Load(File.OpenRead(fileName)); } } else if (fileFormat.FileInfo.Compression != null) { MemoryStream mem = new MemoryStream(); fileFormat.Save(mem); mem = new MemoryStream(mem.ToArray()); var finalStream = CompressFile(mem, fileFormat); // File.WriteAllBytes(fileName, finalStream.ToArray()); using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { finalStream.CopyTo(fileStream); } } else { using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { fileFormat.Save(fileStream); } } stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; log.SaveTime = string.Format("{0:D2}:{1:D2}:{2:D2}", ts.Minutes, ts.Seconds, ts.Milliseconds); return(log); }