2

我的 C#应用程序将文件从远程文档管理系统同步到文件系统。

文档管理系统具有与每个文件相关联但不存储在每个文件中的元数据(上次审核日期、保密、作者...)。
文件可以是任何东西(bmp、xwd、pdf、未知二进制文件)

我想让这些元数据在本地 Windows 文件系统上可见。
但我不能在每个文件中存储元数据。例如,更改文件的保密性不得修改文件的校验和。

存储此元数据的最佳方式是什么?

我听说过 NTFS扩展文件属性,它适用于我的场景吗?这个关于设置扩展文件属性的问题有所有关于修改文件本身的答案,我必须避免。

如果没有标准解决方案,那么我会将元数据存储在本地 SQLite 数据库中。但我真的更喜欢使用标准解决方案,以便其他应用程序(资源管理器、图库应用程序等)可以显示/修改他们理解的属性(如“作者”)

4

1 回答 1

3

备用数据流是 NTFS 鲜为人知的功能之一。从页面引用:

C:\test>echo "ADS" > test.txt:hidden.txt

C:\test>dir
 Volume in drive C has no label.
 Volume Serial Number is B889-75DB

 Directory of C:>test

10/22/2003  11:22 AM    

. 10/22/2003 11:22 AM
.. 10/22/2003 11:22 AM 0 test.txt

C:\test> notepad test.txt:hidden.txt

This will open the file in notepad and allow you to edit it and save it.

它类似于 Macintosh 资源分支,即它允许将任意数据与文件相关联,而不是文件本身的一部分。Explorer 默认不理解它,但你可以为它编写一个列处理程序

编辑

可以使用OLE 文档属性保存一些元数据(例如作者和标题)。我不知道它是否会修改文件本身,但:

private void button1_Click(object sender, EventArgs e)
{
  //This is the PDF file we want to update.
  string filename = @"c:\temp\MyFile.pdf";
  //Create the OleDocumentProperties object.
  DSOFile.OleDocumentProperties dso = new DSOFile.OleDocumentProperties();
  //Open the file for writing if we can. If not we will get an exception.
  dso.Open(filename, false,

    DSOFile.dsoFileOpenOptions.dsoOptionOpenReadOnlyIfNoWriteAccess);
  //Set the summary properties that you want.
  dso.SummaryProperties.Title = "This is the Title";
  dso.SummaryProperties.Subject = "This is the Subject";
  dso.SummaryProperties.Company = "RTDev";
  dso.SummaryProperties.Author = "Ron T.";
  //Save the Summary information.
  dso.Save();
  //Close the file.
  dso.Close(false);
}
于 2012-11-01T06:46:20.707 回答