2011-12-29 14 views
0

ユーザーが自分のサイトからダウンロードできるファイルに文字列を書き込もうとしています。Response.BinaryWrite() - ファイルの先頭で迷惑メールを取得する

var tcxString = "Some code to get my string"; 

byte[] bytes; 
MemoryStream cvsStream = new MemoryStream(); 
BinaryFormatter bf = new BinaryFormatter(); 
bf.Serialize(cvsStream, tcxString); 

cvsStream.Seek(0, SeekOrigin.Begin); 
bytes = cvsStream.ToArray(); 

Response.Clear(); 
Response.AppendHeader("content-length", cvsStream.Length.ToString()); 
Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("content-disposition", "attachment; filename=MyFileName.txt"); 
Response.BinaryWrite(bytes); 

出力は次のようになります。

ÿÿÿÿ   Some code to get my string 

私はそれが私の場所を求めるが、私はあるべき正しいシークかわからないとしなければならない推測しています。ファイルの最後に迷惑メールがあることもあります。ファイルの先頭と最後に迷惑メールを取り除くにはどうすればよいですか?

+3

あなたは本当に何をしようとしていますか?あなたの文字列の内容を出力に書き込んでみて、ユーザーがそれをダウンロードできるようにしてください。 binaryFormatterを使用するのではなく、文字列をレスポンスに直接書き込んでください(AppenHeaderの呼び出しは、クライアントがダウンロードとして扱うようにします)。迷惑メールは、いくつかの型/インスタンス情報を付加して文字列を直列化するBinaryFormatterの製品です。 – Polity

+3

なぜ 'WriteFile'の代わりに' BinaryWrite'を使うのですか? – Oded

+0

polity is right .. binaryFormatterを使用しないでください –

答えて

2

これは、使用しているバイナリフォーマッタのためです。代わりにEncoding.GetBytesを試してください。それはあなたが書いているテキストファイル

 var tcxString = "Some code to get my string"; 

     byte[] bytes = Encoding.UTF8.GetBytes(tcxString); 

     Response.Clear(); 
     Response.AppendHeader("content-length", bytes.Length.ToString()); 
     Response.ContentType = "application/octet-stream"; 
     Response.AppendHeader("content-disposition", "attachment; filename=MyFileName.txt"); 
     Response.BinaryWrite(bytes); 

よろしく

+1

バイナリformmaterはオブジェクトグラフをシリアル化するために実際に使用されますが、文字列はバイト配列に変換する必要があります –

2

ですか? Response.Writeを使用して、コンテンツを出力ストリームに書き込みます。

string tcxString = "Some code to get my string"; 

Response.Clear(); 
Response.ContentType = "text/plain"; 
Response.AppendHeader("content-disposition", "attachment; filename=MyFileName.txt"); 
Response.Write(tcxString); 
関連する問題