【问题标题】:Decompress a .s file in c# windows form application在 c# windows 窗体应用程序中解压 .s 文件
【发布时间】:2021-02-11 11:06:55
【问题描述】:

我正在尝试使用 c# 以编程方式解压缩 .s 文件。我已经尝试使用我知道的所有可能的方法,但无法解压缩它。我的实际文件是 file.tar.gz,我使用 ICSharpCode.SharpZipLib.Tar 和 ICSharpCode.SharpZipLib.GZip 解压缩了 .tar.gz。在我未压缩的文件夹中,我将拥有不同的“file_1.s”格式的文件。有人可以指导我吗? 这是我的解压函数:

   public void ExtractTGZ(String gzArchiveName, String destFolder)
   {
       Stream inStream = File.OpenRead(gzArchiveName);
       Stream gzipStream = new GZipInputStream(inStream);
       TarArchive tarArchive = TarArchive.CreateInputTarArchive(gzipStream);
       tarArchive.ExtractContents(destFolder);
       tarArchive.Close();
       gzipStream.Close();
       inStream.Close();
   }
   public void ExtractTar(String tarFileName, String destFolder)
   {
       Stream inStream = File.OpenRead(tarFileName);
       TarArchive tarArchive = TarArchive.CreateInputTarArchive(inStream);
       tarArchive.ExtractContents(destFolder);
       tarArchive.Close();
       inStream.Close();
   }

当一个按钮事件发生时,它会从windows explorer中选择file.tar.gz,然后用next按钮开始解压,代码如下:

        private void OpenFileLocationEvent(object sender, EventArgs e)
        {
           
            if (openLogs.ShowDialog() == DialogResult.OK)
            {
                tbTargetFile.Text = openLogs.FileName;
            }
        }

        private void StartAnalysis(object sender, EventArgs e)
        {
            
            if (tbTargetFile.TextLength > 5)
            {
                //MessageBox.Show("Source File:" + tbTargetFile.Text + " ExtrctdDirectory:" + nextDirectory);
                _uc.ExtractTGZ(tbTargetFile.Text, nextDirectory);//Extract .tar.gz

                string[] files = Directory.GetFiles(nextDirectory, "*.s");
                string filename = "";
                string targetFile = "";
                string newFile = "";
                int count = 0;
                foreach (string f in files)
                {//Changing File Type
                    filename = Path.GetFileName(f);
                    targetFile = nextDirectory + "//" + filename;
                    newFile = nextDirectory + "//File_" + count + ".tar";
                    File.Move(targetFile, newFile);
                    count += 1;
                    //FileInfo finfo = new FileInfo(targetFile);
                    //finfo.MoveTo(Path.ChangeExtension(targetFile, ".txt"));
                }
                string[] tarfiles = Directory.GetFiles(nextDirectory, "*.tar");
                foreach (string f in tarfiles)
                {
                    filename = Path.GetFileName(f);
                    targetFile = nextDirectory + "\\" + filename;
                    MessageBox.Show("Traget File:" + targetFile + " ExtrctdDirectory:" + extrctdDirectory);
                    _uc.ExtractTar(targetFile, extrctdDirectory);
                    //_uc.ExtractTarByEntry(targetFile, extrctdDirectory, false);
                    //ZipFile.ExtractToDirectory(targetFile, extrctdDirectory);
                }
            }
        }

【问题讨论】:

  • 真正的问题是“文件格式是什么?”我认为,而不是所有这些推测性的代码都试图解压缩它。 .s 文件通常是汇编文件...前几个字节是什么?您是否尝试通过 file 实用程序运行它?
  • 是的 .s 是汇编文件格式。我可以使用 7zip 解压缩它。我尝试将其格式(如 .s 更改为 .zip 或 .tar),但我无法做到。而以编程方式转换的文件使用 7 zip 手动解压缩。
  • 您是否尝试过使用控制台版本 7-zip 的代码解压文件?
  • 为什么你认为一个程序集文件实际上是一个压缩的tarball?他们完全不同。 7-zip解压成什么?
  • @Maciej Los 我还没有尝试过 7-zip 的控制台版本

标签: c# compression


【解决方案1】:

使用 7zip 控制台应用程序解决了我的问题。这是我的代码。

private void StartAnalysis(object sender, EventArgs e)
        {
            
            if (tbTargetFile.TextLength > 5)
            {
                ProcessStartInfo p = new ProcessStartInfo();
                p.FileName = "7za.exe";
                p.Arguments = "x \"" + tbTargetFile.Text + "\" -o\"" + nextDirectory + "\"";
                p.WindowStyle = ProcessWindowStyle.Hidden;
                Process x = Process.Start(p);
                x.WaitForExit();
                string[] files = Directory.GetFiles(nextDirectory, "*.tar");
                string filename = "";
                string targetFile = "";
                foreach (string f in files)
                {
                    filename = Path.GetFileName(f);
                    targetFile = nextDirectory + "\\" + filename;
                }
                p.Arguments = "x \"" + targetFile + "\" -o\"" + nextDirectory + "\"";
                p.WindowStyle = ProcessWindowStyle.Hidden;
                x = Process.Start(p);
                x.WaitForExit();
                targetFile = nextDirectory + "\\*.s";
                p.Arguments = "x \"" + targetFile + "\" -o\"" + extrctdDirectory + "\"";
                p.WindowStyle = ProcessWindowStyle.Hidden;
                x = Process.Start(p);
                x.WaitForExit();
            }
        }

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2019-01-05
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多