2012-07-09 170 views
1

我需要用C#编写一个“对象”到一个文件,但到目前为止我所有的尝试都无法工作。问题是我想要写入的对象实际上是object,因为它是从Outlook电子邮件的对象的Attachments集合中返回的。如何在C#中将对象写入二进制文件?

我已经设法将其插入到SQL Server数据库中,从中检索并成功创建了正确的文件,但这不是唯一的方法。

我也使用BinaryFormatter尝试如下图所示,但总是在一开始加入一些不需要的字符会破坏我的文件头(剩余的数据似乎可以):

[...] 
using (FileStream fileStream = new FileStream(tempName, FileMode.Create)) 
{ 
    using (BinaryWriter binaryWriter = new BinaryWriter(fileStream)) 
    { 
     using (MemoryStream memoryStream = new MemoryStream()) 
     { 
      object attachmentData =          
       attachment.PropertyAccessor.GetProperty(PR_ATTACH_DATA_BIN); 
      BinaryFormatter binaryFormatter = 
       new BinaryFormatter(); 
      binaryFormatter.Serialize(memoryStream, attachmentData); 
      memoryStream.Seek(0, SeekOrigin.Begin); 
      binaryWriter.Write(memoryStream.ToArray()); 
     } 
    } 
} 
[...] 

任何想法?我无法控制我从Outlook获得,因此通常的做法系列化似乎没有什么,我需要在这里...

回答

5

我认为这是你在找什么:

How to: Save attachments from outlook

if (newEmail.Attachments.Count > 0) 
{ 
     for (int i = 1; i <= newEmail.Attachments.Count; i++) 
     { 
      newEmail.Attachments[i].SaveAsFile 
       (@"C:\TestFileSave\" + 
       newEmail.Attachments[i].FileName); 
     } 
} 
+0

噢,我的上帝,一个人怎么会失明......这正是我所需要的,只是尝试过而且能够发挥作用。谢谢! – Gorgsenegger 2012-07-09 08:19:08

+0

另请注意,您不要在此处写入对象,而是写入对象的内容。你的信号测试指向serializaton,它不会导致内容(仅)。 – TomTom 2012-07-09 08:38:16