2010-11-18 7 views
0

interopと同じように、まさにそれは何ですか?ここでADODB.Streamとは何ですか?

、これは私がそれを使用する方法である:

public void SaveAttachmentMime(String fileName, CDO.Message message) 
    { 
     ADODB.Stream stream = message.BodyPart.GetStream(); 

     String messageString = stream.ReadText(stream.Size); 

     StreamWriter outputStream = new StreamWriter(fileName); 

     outputStream.Write(messageString); 
     outputStream.Flush(); 
     outputStream.Close(); 
    } 

答えて

3

ADODB.Streamオブジェクトは、ファイルや他のストリームを読み取るために使用されました。それは、.NETフレームワークでStreamReader,StreamWriterFileStream、およびStreamの一部になります。

このメソッドのコードでは、.NETでStreamReaderを使用してStreamから読み取ります。

ストリームにUnicode以外のデータが含まれている場合は、バイト数を使用して読み込む文字数を決定するため、メソッドのコードは正しく動作することに注意してください。 Unicodeエンコーディングでは、いくつかの文字がいくつかのバイトとしてエンコードされるため、指定された文字数を読み取る前にストリームがストリームの最後まで実行されます。

+0

これは、単にcomとの相互運用性のための使用ですか? –

+0

@NoProblemBabe:はい、COMオブジェクトが 'ADODB.Stream'オブジェクトを返すか、または期待しているときに使用します。 .NETのファイル操作とストリーム操作では、フレームワークのクラスを使用する方がよいでしょう。 – Guffa

+0

あなたはストリームのサイズについて素敵なタッチ、それは私を逃れたと言った。ありがとうございました。あなたはそれを渡す方法を提案していますか? –

1

これはCOMオブジェクトで、データまたはテキストのストリームを表すために使用されます。データはバイナリにすることができます。私が正しく思い出した場合、それはstructured storage objectにデータを格納するIStreamインターフェイスを実装しています。インターフェイスのinterop表現はSystem.Runtime.InteropServices.ComTypes.IStreamにあります。

+0

interopを扱う以外は、現時点で本当に使用する必要はありますか? –

+0

はい、それが必要なのは唯一のシナリオです。 COMオブジェクトである 'CDO.Message'があなたの例のように' GetStream'メソッドから 'Stream'オブジェクトを返します。コードがかなり古くなっていることを示しました。これは、System.Web.MailがCDOのラッパーであったためです。フレームワークのバージョン2.0から、System.Net.Mail名前空間にあるクラスを使用します。 – Garett

関連する問題