2010-11-18 4 views
0

Was genau ist es, oder wurde es, wie es eine Interop ist, verwendet? HierWas ist ADODB.Stream?

ist dies das Verfahren, in dem ich es verwenden:

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(); 
    } 

Antwort

3

Das ADODB.Stream Objekt verwendet wurde, Dateien und andere Ströme zu lesen. Was es tut, ist ein Teil dessen, was die StreamReader, StreamWriter, FileStream und Stream im .NET Framework tut.

Für was der Code in dieser Methode verwendet, in .NET würden Sie eine StreamReader verwenden, um von einem Stream zu lesen.

Beachten Sie, dass der Code in der Methode nur ordnungsgemäß funktioniert, wenn der Stream Nicht-Unicode-Daten enthält, da er die Größe in Bytes verwendet, um zu bestimmen, wie viele Zeichen gelesen werden sollen. Bei einer Unicode-Codierung können einige Zeichen als mehrere Bytes codiert sein, so dass der Stream am Ende des Streams laufen würde, bevor er die Anzahl der angegebenen Zeichen lesen könnte.

+0

So ist es nur für die Interoperabilität mit einem com verwenden? –

+0

@NoProblemBabe: Ja, Sie verwenden es, wenn ein COM-Objekt ein "ADODB.Stream" -Objekt zurückgibt oder erwartet. Für Datei- und Stream-Operationen in .NET ist es besser, die Klassen im Framework zu verwenden. – Guffa

+0

Sie sagten über die Größe des Streams, nette Geste, es entging mir. Dank dafür. Haben Sie einen Vorschlag, wie Sie das umgehen können? –

1

Es ist ein COM-Objekt, das verwendet wird, um einen Datenstrom oder Text darzustellen. Die Daten können binär sein. Wenn ich mich richtig erinnere, implementiert es die IStream Schnittstelle, die Daten in einem structured storage object speichert. Sie finden die Interop-Darstellung der Schnittstelle in System.Runtime.InteropServices.ComTypes.IStream.

+0

Ist es heutzutage wirklich notwendig, es zu benutzen, außer mit Interop umzugehen? –

+0

Ja, das ist das einzige Szenario, wo es benötigt würde. Wie in Ihrem Beispiel gibt 'CDO.Message', das ein COM-Objekt ist, ein' Stream'-Objekt aus der 'GetStream'-Methode zurück. Wie Sie angegeben haben, ist der Code ziemlich alt. Es ist da, weil System.Web.Mail ein Wrapper um CDO war. Ab Version 2.0 des Frameworks verwenden Sie die im System.Net.Mail-Namespace gefundenen Klassen. – Garett