C#SharpZipLib解压缩.TGZ NotSupportedException

时间:2014-05-30 11:49:34

标签: c# sharpziplib notsupportedexception

我是编程新手,请耐心等待。

我目前正在开发Visual C#2010 Express,.NET Framework 4.0中的一个小程序,该程序在Linux机器上启动脚本(创建文件/tmp/logs.tgz),下载文件然后我想要提取它。运行脚本并通过Renci.SshNet下载文件完美无瑕。 但是当我想要提取它时,它会给我一个错误“NotSupportedException”我的文件路径格式不正确(我认为不是这种情况?)。 我直接从here复制并粘贴代码(从TGZ(.tar.gz)简单完整摘录)并根据我的需要对其进行编辑:

        using System.IO;
        using System.IO.Compression;
        using ICSharpCode.SharpZipLib.GZip;
        using ICSharpCode.SharpZipLib.Tar;
        //it executed the Script and created the file on the Linux Machine /tmp/logs.tgz
        //now I want to download it

        string myTime = DateTime.Now.ToString("yyyyMMdd");
        var pathWithEnv = (@"%USERPROFILE%\Desktop\logs" + myTime + ".tgz");
        var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv);
        string localFile = filePath;

        //then downloads /tmp/logs.tgz to ..\Desktop\logs+ myTime +.tgz
        //everything great until now. here I want to extract .TGZ:

        var pathWithEnv2 = (@"%USERPROFILE%\Desktop\logs" + myTime);
        var fileDir = Environment.ExpandEnvironmentVariables(pathWithEnv2);
        string localDir = fileDir;

        Stream inStream = File.OpenRead(localFile);
        Stream gzipStream = new GZipInputStream(inStream);

        TarArchive tarArchive = TarArchive.CreateInputTarArchive(gzipStream);
        //ERROR OCCURS HERE:
        tarArchive.ExtractContents(localDir);

        tarArchive.Close();
        gzipStream.Close();
        inStream.Close();

我甚至尝试在没有EnviromentVariable的情况下设置localFile和localDir字符串,但这没有用。我试过了: - 直接下载并在C:\(或映射的网络驱动器U :)上解压缩,以防止文件名太长(不应该是这种情况,因为它永远不会超过86个字符)。 - string = @“C:.. \ logs”,string =“C:\ .. \ logs”,string = @“C:.. \ logs \”等。 - 尝试没有myTime - 使用ICSharpCode.SharpZipLib.Core;

我做了一个MessageBox.Show(localDir);在tarArchive.ExtractContents(localDir)之前;它显示“C:\ Users \ Baumann \ Desktop \ logs20140530”这是正确的,这就是我要将其提取到的目录。即使在执行目录之前创建目录也无济于事。

我还创建了一个只有一个按钮的新项目,该按钮应该启动提取并发生相同的错误。

我试过,单独做,首先提取GZip然后提取.tar,但是在提取GZip时它也给了我相同的错误(使用ICSharpCode.SharpZipLib.Core;当然)。

让我更加疯狂的是,它在它失败之前开始提取它,但不是一切。并且始终是相同的文件,我不明白为什么这些以及为什么不是其他文件。

我在Windows 8.1上,使用SharpZipLib 0.86.0.518,直接从网站下载。

提前致谢。

1 个答案:

答案 0 :(得分:0)

好吧,我终于解决了问题。 Linux机器正在创建一个包含MAC-Adress的文件,因为Windows无法处理":"在文件名中,它崩溃了。 我现在逐个文件解压缩并检查每个文件":"并用" _"替换它,完美无缺。