2009-07-20 16 views
3

とレスポンスを介してクライアントにZipファイルを送信すると、これは私が単にいくつかの「言葉でジップ内側のreadme.txtドキュメントとzipファイルを返すようにしようとしているこの時点で私のコードDotNetZip

private void sendToClient(Dictionary<string, string> reportDic) 
    { 
     Response.Clear(); 
     Response.BufferOutput = false; 
     String ReadmeText = "some text"; 
     Response.ContentType = "application/zip"; 
     Response.AddHeader("content-disposition", "filename=" + "filename.zip"); 
     using (ZipFile zip = new ZipFile()) 
     { 
      zip.AddEntry("Readme.txt", ReadmeText); 
      zip.Save(Response.OutputStream); 
     } 
     Response.Close(); 
    } 

です文書内に「テキスト」を表示します。

zipファイルはfilename.zip(予期されています)の文書でreadme.txt(予期される)とdoucment(予期しない)の内部にテキストがありません。

このコードは、例hereとほぼ同じです。これは、他の人がこの正確な問題にぶつかったことを私にしてくれます。

私の最終目標はこのようなことです。

private void sendToClient(Dictionary<string, string> reportDic) 
    { 
     Response.BufferOutput = false; 
     Response.ContentType = "application/zip"; 
     Response.AddHeader("content-dispostion", "filename=text.zip"); 
     Response.ContentEncoding = Encoding.Default; 
     Response.Charset = ""; 
     using (ZipFile zip = new ZipFile()) 
     { 
      foreach (string key in reportDic.Keys) 
      { 
       zip.AddEntry(key, reportDic[key]); 
      } 
      zip.Save(Response.OutputStream); 
     } 
     Response.Close(); 
    } 

zipファイルに3つの文字列をファイルとして追加しますが、ここではその例を使用するために解決します。

誰もが何か提案がありますか?私は新しいプロジェクトにコピーした場合

おかげ

--UPDATE-- これは動作するはずですが、実際には、それが宣伝と同じように動作しますが、私は私のプロジェクトでのDLLの毒性ミックスや一部破損している必要があります、それはあいまいなものである。素晴らしい。

+0

iZarcで開こうとすると、不正なzipヘッダーエラーが発生しますが、開かれて空のファイルが表示されます。このzipはxp圧縮ユーティリティでは開かれません。 – jim

+0

私は、文字列、バイト[]とストリームを持つ "AddEntry"メソッドを試しました。いいえ。 – jim

+0

ジム、これはソートされましたか? – Cheeso

答えて

1

ヒント:

あなたはかつてのを使用する場合は、HTMLのジャンクは、zipファイルの一番下に追加されます

Response.Close(); 

を使用し、代わりに

HttpContext.Current.ApplicationInstance.CompleteRequest();  

を使用していません。

+0

ありがとうございます。 – jim

0

ダミーテキストを使用してAddFileメソッドを実装しようとしましたか?これは必須です。

+0

私はこれを試したところ、zip.addFile( "somefile.txt")のような何かをしても、ファイルが見つからないという例外があります。 – jim

+0

addFileはディスクにファイルを追加する方法のようです。 – jim

0

CodePlexにリンクした例は、AddEntryメソッドがストリームからデータを読み込むと言えます。あなたはちょうど文字列を渡しています - StringReaderを作成してReadmeText文字列を見て、代わりにこの文字列を渡すことができますか?

+0

あたかも文字列を取るためにオーバーロードされているようです。 – jim

+0

ああ、私は実際のAPIを見ていません。ちょうどウェブページの例です。 –

+0

私はAPIを全く見ていない、私は例から抜け出して、彼らは貧しい、または少なくとも私はそれらを理解するにはあまりにも愚かです。他のものを使うような、代わりの解決策を見つける以外に、ここからどこに行くのか分かりません。 – jim

関連する問題