2010-11-18 22 views
0

De quoi s'agit-il exactement, ou était-ce, comme l'est un interop?Qu'est-ce que ADODB.Stream?

Ici, c'est la méthode où je l'utilise:

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

Répondre

3

L'objet ADODB.Stream a été utilisé pour lire des fichiers et d'autres cours d'eau. Qu'est-ce qu'il fait est une partie de ce que le StreamReader, StreamWriter, FileStream et Stream fait dans le cadre. NET.

Pour ce que le code dans cette méthode utilise pour, dans .NET, vous utiliseriez un StreamReader pour lire à partir d'un Stream.

Notez que le code de la méthode ne fonctionne correctement que si le flux contient des données non-Unicode, car il utilise la taille en octets pour déterminer le nombre de caractères à lire. Avec un codage Unicode, certains caractères peuvent être codés sur plusieurs octets, de sorte que le flux serait exécuté à la fin du flux avant de pouvoir lire le nombre de caractères spécifié.

+0

Donc, son utilisation est simplement pour l'interopérabilité avec un com? –

+0

@NoProblemBabe: Oui, vous l'utilisez lorsqu'un objet COM renvoie ou attend un objet 'ADODB.Stream'. Pour les opérations de fichiers et de flux dans .NET, il est préférable d'utiliser les classes dans le framework. – Guffa

+0

vous avez dit à propos de la taille du flux, belle touche, il m'a échappé. Merci pour ça. Avez-vous une suggestion sur la façon de passer cela? –

1

C'est un objet COM, utilisé pour représenter un flux de données ou de texte. Les données peuvent être binaires. Si je me souviens bien, il implémente l'interface IStream, qui stocke les données dans un structured storage object. Vous pouvez trouver la représentation interop de l'interface dans System.Runtime.InteropServices.ComTypes.IStream.

+0

Existe-t-il un réel besoin de l'utiliser de nos jours, à l'exception de traiter avec interop? –

+0

Oui, c'est le seul scénario où cela serait nécessaire. Comme dans votre exemple, 'CDO.Message', qui est un objet COM, renvoie un objet' Stream' de la méthode 'GetStream'. Comme vous l'avez indiqué, le code est assez vieux. C'est là parce que System.Web.Mail était un wrapper autour de CDO. À partir de la version 2.0 du framework, vous utiliserez les classes trouvées dans l'espace de noms System.Net.Mail. – Garett