/// <summary> /// Unpacking file /// </summary> /// <param name="Res">PackResource </param> public bool UnpackFile(PackResource Res) { Console.WriteLine("Unpack"); String InternalName = Res.GetName(); CommonSaveFileDialog dSaveAs = new CommonSaveFileDialog(); dSaveAs.DefaultFileName = Path.GetFileName(InternalName); if (dSaveAs.ShowDialog() == CommonFileDialogResult.Ok) { if (!isCLI) { this.pd.ShowDialog(ProgressDialog.PROGDLG.Normal); this.pd.Caption = Properties.Resources.Str_Unpack; } try { // loading file content. byte[] buffer = new byte[Res.GetSize()]; Res.GetData(buffer); Res.Close(); // Delete old if (File.Exists(dSaveAs.FileName)) { File.Delete(dSaveAs.FileName); } // Write to file. FileStream fs = new FileStream(dSaveAs.FileName, System.IO.FileMode.Create); fs.Write(buffer, 0, buffer.Length); fs.Close(); // Modify File time File.SetCreationTime(dSaveAs.FileName, Res.GetCreated()); File.SetLastAccessTime(dSaveAs.FileName, Res.GetAccessed()); File.SetLastWriteTime(dSaveAs.FileName, Res.GetModified()); } catch (Exception) { return(false); } finally { Res.Close(); this.pd.CloseDialog(); Console.WriteLine("Finish."); } return(true); } return(false); }
/// <summary> /// Unpacking Package file process. /// </summary> /// <param name="InputFile">Set filename of unpack file..</param> /// <param name="OutputDir">Set output distnation of Unpacked files.</param> public void Unpack(string InputFile, string OutputDir) { if (!isCLI) { this.pd.Caption = Properties.Resources.Str_Unpack; this.pd.ShowDialog(ProgressDialog.PROGDLG.Normal); } Console.WriteLine("Unpack"); m_Unpack = PackResourceSet.CreateFromFile(InputFile); uint packed_files = m_Unpack.GetFileCount(); if (!isCLI) { pd.Maximum = packed_files; if (this.pd.HasUserCancelled) { m_Unpack.Dispose(); this.pd.CloseDialog(); return; } } for (uint i = 0; i < packed_files; ++i) { PackResource Res = m_Unpack.GetFileByIndex(i); String InternalName = Res.GetName(); if (!isCLI) { this.pd.Message = String.Format(Properties.Resources.Str_Unpacking, i, packed_files); this.pd.Detail = "data\\" + InternalName; this.pd.Value = i; if (pd.HasUserCancelled) { m_Unpack.Dispose(); Interrupt(); return; } } Console.WriteLine(String.Format("{0}/{1} {2}", i, packed_files, InternalName)); // loading file content. byte[] buffer = new byte[Res.GetSize()]; Res.GetData(buffer); Res.Close(); // Get output Directory Name String outputPath = @OutputDir + "\\data\\" + InternalName; // Create directory String DirPath = Regex.Replace(outputPath, @"([^\\]*?)$", ""); if (!Directory.Exists(DirPath)) { Directory.CreateDirectory(DirPath); } // Delete old if (File.Exists(outputPath)) { //DateTime dtUpdate = System.IO.File.GetLastWriteTime(outputPath); //if (dtUpdate > Res.GetModified()){ File.Delete(@outputPath); //}else{ //Todo Overwrite confirm dialog //} } if (Directory.Exists(outputPath)) { Directory.Delete(@outputPath); } // Write to file. FileStream fs = new FileStream(outputPath, System.IO.FileMode.Create); fs.Write(buffer, 0, buffer.Length); fs.Close(); // Modify File time File.SetCreationTime(outputPath, Res.GetCreated()); File.SetLastAccessTime(outputPath, Res.GetAccessed()); File.SetLastWriteTime(outputPath, Res.GetModified()); } m_Unpack.Dispose(); if (!isCLI) { this.pd.CloseDialog(); } Console.WriteLine("Finish."); }
/// <summary> /// Unpacking file /// </summary> /// <param name="Res">PackResource </param> public bool UnpackFile(PackResource Res) { Console.WriteLine("Unpack"); String InternalName = Res.GetName(); CommonSaveFileDialog dSaveAs = new CommonSaveFileDialog(); dSaveAs.DefaultFileName = Path.GetFileName(InternalName); if (dSaveAs.ShowDialog() == CommonFileDialogResult.Ok) { if (!isCLI) { this.pd.ShowDialog(ProgressDialog.PROGDLG.Normal); this.pd.Caption = Properties.Resources.Str_Unpack; } try { // loading file content. byte[] buffer = new byte[Res.GetSize()]; Res.GetData(buffer); Res.Close(); // Delete old if (File.Exists(dSaveAs.FileName)) { File.Delete(dSaveAs.FileName); } // Write to file. FileStream fs = new FileStream(dSaveAs.FileName, System.IO.FileMode.Create); fs.Write(buffer, 0, buffer.Length); fs.Close(); // Modify File time File.SetCreationTime(dSaveAs.FileName, Res.GetCreated()); File.SetLastAccessTime(dSaveAs.FileName, Res.GetAccessed()); File.SetLastWriteTime(dSaveAs.FileName, Res.GetModified()); } catch (Exception) { return false; } finally { Res.Close(); this.pd.CloseDialog(); Console.WriteLine("Finish."); } return true; } return false; }