【发布时间】: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