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

问题描述:

我正在.NET 3.5,Visual Studio 2010中工作。我正在研究一个将某些电子邮件保存到文件夹的Outlook加载项。我已经使用Microsoft.Office.Interop.Outlook.MailItem.SaveAs函数得到它的工作。但是,文件属性只有当前时间(通过加载项导出文件的时间),因为它们的“修改日期/创建日期等”以及其他属性(如“到”,“从”,“抄送”,“密件抄送”)都不存在。在C#中修改除日期以外的文件属性

如果您在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); 
} 

此代码成功地抓住选定的电子邮件(S)和将它们保存在文件名。但是,当您打开.msg时,email.To =“我填入To”会更改信息,但不会更改文件属性。

+0

之前有没有File.Tag像有一个File.SetCreationTime()。 ..你的意思是我应该能够访问它吗? – Jake 2012-07-12 18:02:25

+0

这里是一个链接,你可以看看..但你将不得不将代码转换为C#或者你可以使用VB.NET代码,只需使用Microsoft.VisualBasic http://p2p.wrox放入你的头文件。 com/excel-vba/35766-file-information.html – MethodMan 2012-07-12 18:05:08

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

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

如果你想改变To,From等你必须改变你正在保存的文件的内容,即改变信息中的To或From。

要做到这一点,如果你有一个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(); 
+0

好的,有趣的。工作流程也应该是打开文件,在顶部添加一个名为“To”的标题,使用该信息填充它,然后保存该文件? – Jake 2012-07-12 18:11:04

+0

我不知道MS Outlook保存电子邮件的确切格式。但是,如果您可以在记事本中打开它并在电子邮件的主要内容之前看到以To,From或Subject开头的行,则可以更改这些行。我认为,在Outlook中重新打开文件时,在所有内容之前放入行都会导致问题。 – 2012-07-12 18:20:14

+0

是的,添加标头不起作用。我还在这里找到了一些有趣的信息:http://*.com/questions/5337683/how-to-set-extended-file-properties,这表明我使用.dll文件作为Office文档,但标准格式从Outlook(.msg)不被视为Outlook文档,因此它不适用于我的目的。 – Jake 2012-07-12 18:30:45