【问题标题】:How can I write an object to a binary file in C#?如何在 C# 中将对象写入二进制文件?
【发布时间】:2012-07-08 14:53:27
【问题描述】:

我需要在 C# 中将“对象”写入文件,但到目前为止我的所有尝试都没有奏效。问题是我要编写的对象实际上是 object 类型,因为它是从 Outlook 电子邮件中的 MailItem 对象的 Attachments 集合返回的。

我已经设法将它插入到 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 获得的内容,因此通常的序列化方法似乎不是我需要的...

【问题讨论】:

    标签: c# .net file object binary


    【解决方案1】:

    我想这就是你要找的:

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

    【讨论】:

    • 天哪,人怎么这么瞎……这正是我需要的,刚刚试了一下,它就可以了。谢谢!
    • 另请注意,您在这里写的不是对象而是对象的内容。您的原始测试指出序列化不会导致内容(仅)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多