【问题标题】:Modify File Properties in C# Other Than Date在 C# 中修改除日期以外的文件属性
【发布时间】:2012-07-13 03:07:50
【问题描述】:

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

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

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

【问题讨论】:

  • 没有 File.Tag 就像有一个 File.SetCreationTime()...你的意思是我应该可以在哪里访问它?
  • 这里有一个链接,您可以查看 .. 但您必须将代码转换为 C#,或者您可以使用 VB.NET 代码并使用 Microsoft.VisualBasic @987654322 将您的标题放入@

标签: c#


【解决方案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();

【讨论】:

  • 好吧,有趣。那么工作流程是打开文件,在顶部添加一个名为“To”的标题,用该信息填写,然后保存文件吗?
  • 我不知道 MS Outlook 保存电子邮件的确切格式。但是,如果您可以在记事本中打开它并在电子邮件的主要内容之前看到以 To、From 或 Subject 开头的行,您可以更改这些行。我认为在 Outlook 中重新打开文件时,在所有内容之前简单地放置 To 行会导致问题。
  • 是的,添加标题不起作用。我还在这里找到了一些有趣的信息:stackoverflow.com/questions/5337683/…,它建议我将 .dll 文件用于 Office 文档,但 Outlook (.msg) 的标准格式不被视为 Outlook 文档,因此它不适用于我的目的。
  • 是的,我连接到我可以访问 MS Outlook 的工作远程桌面。它以某种二进制格式保存电子邮件。是的,我认为如何使用 MS Office Excel/Work 将不起作用。 Word 或 Excel 文档具有特殊属性,这是真的,但它们是特定于“文档”的,例如认为(作者、标题..),而不是电子邮件。
  • 在答案中查找我的最后一个编辑 :) 这可能是你想要的。
猜你喜欢
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 2012-05-16
  • 2012-07-07
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多