Asp .NET 从 tar.gz 存档中读取文件

Asp .NET Read a file from a tar.gz archive

我在一个 .tar.gz 存档中有一些文件。这些文件在 linux server.How 上,如果我知道它的名称,我可以从这个存档中的特定文件中读取吗? 为了直接从 txt 文件读取,我使用了以下代码:

Uri urlFile = new Uri("ftp://" + ServerName + "/%2f" + FilePath + "/" + fileName);
WebClient req = new WebClient() { Credentials=new NetworkCredential("user","psw")};
string result = req.DownloadString(urlFile);

是否可以在不复制本地机器上的存档的情况下读取此文件,类似于上面的代码?

我找到了解决办法。也许这可以帮助你们。

// archivePath="ftp://myLinuxServer.com/%2f/move/files/archive/20170225.tar.gz";
    public static string ExtractFileFromArchive(string archivePath, string fileName)
    {
        string stringFromFile="File not found";
        WebClient wc = new WebClient() { Credentials = cred, Proxy= webProxy  };        //Create webClient with all necessary settings 

        using (Stream source = new GZipInputStream(wc.OpenRead(archivePath)))  //wc.OpenRead() create one stream with archive tar.gz from our server
        {
            using (TarInputStream tarStr =new TarInputStream(source))   //TarInputStream is a stream from ICSharpCode.SharpZipLib.Tar library(need install SharpZipLib in nutgets)
            {
                TarEntry te;
                while ((te = tarStr.GetNextEntry())!=null)  // Go through all files from archive
                {
                    if (te.Name == fileName)
                    {
                        using (Stream fs = new MemoryStream())  //Create a empty stream that we will be fill with file contents.
                        {
                            tarStr.CopyEntryContents(fs);
                            fs.Position = 0;                    //Move stream position to 0, in order to read from beginning
                            stringFromFile = new StreamReader(fs).ReadToEnd(); //Convert stream to string
                        }
                        break;
                    }
                }
            }
        }

        return stringFromFile;
    }