修改C#以外的日期文件属性

时间:2012-07-12 17:54:56

标签: c#

我在.NET 3.5,Visual Studio 2010中工作。我正在使用Outlook加载项将一些电子邮件保存到文件夹中。我已经使用Microsoft.Office.Interop.Outlook.MailItem.SaveAs函数使其工作了。但是,文件属性仅具有当前时间(通过加载项导出文件的时间)作为其日期修改/创建日期等,并且其他属性(如To,From,CC,BCC)不存在。< / p>

如果您在Windows资源管理器中打开一个文件夹(我使用的是Windows 7),请转到顶部,其中显示名称,修改日期,类型等,您可以单击更多,并查看其他可能的列与“专辑艺术家”,“收件人”,“来自”等相关。

C#有一种非常简单的方法来修改时间File.SetCreationTime(filename, DateTime object);。但是,没有.SetTo或.SetAlbumArtist或类似的东西。我该如何修改这些属性?

更新1:通过研究,我找到了这个链接:Read/Write 'Extended' file properties (C#),因此可能包含答案......但我不知道如何。接受的答案提到使用.dll在shell上运行方法。第二个答案包含C#代码,一个评论者然后基本上问我想知道什么(如何修改特定文件的属性),下一个评论者回答“你不能设置这些”...所以我是还是在1号广场。

更新2:我还尝试了以下内容:

foreach (Object selectedObject in explorer.Selection)
{
     Outlook.MailItem email = (selectedObject as Outlook.MailItem);
     //Modify the information about the email
     email.To = "I filled in To";
     email.SaveAs(filename, OlSaveAsType.olMSG);
}

此代码成功抓取所选的电子邮件并将其保存在文件名下。但是,email.To =“我填写To”会在您打开.msg时更改信息,但不会更改文件属性。

1 个答案:

答案 0 :(得分:1)

这是无法更改的,因为它实际上不是文件系统方面的任何文件属性(如文件创建或修改日期时间)。

您正在谈论的Windows资源管理器中的列是“虚拟”,它们“仅”是Windows资源管理器的功能。它“理解”某些文件类型的内容,它可以处理这样的列显示和排序。

如果您想更改收件人,发件人等,您必须更改要保存的文件的内容,即更改邮件中的收件人或收件人。

为此,如果您有一个Microsoft.Office.Interop.Outlook.MailItem对象(您只是保存它),请在将该对象保存到文件之前设置该对象的所需属性,即:

MailItem mail = ...;
mail.To = "some new to";
mail.Subject = "new subject";
mail.SaveAs(fileToSave, OlSaveAsType.OlMSG);

我不知道它是否也会更改存储在Outlook中的电子邮件,如果是这样,请在更改属性之前创建电子邮件的副本

MailItem copyOfMailToSave = (MailItem)mail.Copy();