6

DotNetZip の最新バージョンを使用しており、5 つの XML を含む zip ファイルがあります。
zip を開き、XML ファイルを読み取り、XML の値を文字列に設定します。
これどうやってするの?

コード:

//thats my old way of doing it.But I needed the path, now I want to read from the memory
string xfile = System.IO.File.ReadAllText(strNewFilePath, System.Text.Encoding.Default);

using (ZipFile zip = ZipFile.Read(this.uplZip.PostedFile.InputStream))
{
    foreach (ZipEntry theEntry in zip)
    {
        //What should I use here, Extract ?
    }
}

ありがとう

4

1 に答える 1

16

ZipEntryExtract()ストリームに抽出するオーバーロードがあります。(1)

この回答を組み合わせて、MemoryStream から文字列を取得するにはどうすればよいですか? 、次のようなものが得られます(完全にテストされていません):

string xfile = System.IO.File.ReadAllText(strNewFilePath, System.Text.Encoding.Default);
List<string> xmlContents;

using (ZipFile zip = ZipFile.Read(this.uplZip.PostedFile.InputStream))
{
    foreach (ZipEntry theEntry in zip)
    {
        using (var ms = new MemoryStream())
        {
            theEntry.Extract(ms);

            // The StreamReader will read from the current 
            // position of the MemoryStream which is currently 
            // set at the end of the string we just wrote to it. 
            // We need to set the position to 0 in order to read 
            // from the beginning.
            ms.Position = 0;
            var sr = new StreamReader(ms);
            var myStr = sr.ReadToEnd();
            xmlContents.Add(myStr);
        }
    }
}
于 2012-12-14T23:26:29.140 に答える