将元数据存储在文件外:现代窗口上的任何标准方法



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

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

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

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

我已经听说过NTFS扩展文件属性,它适用于我的方案吗?关于设置扩展文件属性的问题所有答案都在谈论修改文件本身,我必须避免。

如果没有标准解决方案,则我将将元数据存储在本地的SQLite数据库中。但是我真的更喜欢使用标准解决方案,以便其他应用程序(Explorer,Gallery应用等)可以显示/修改他们理解的属性(例如"作者")

替代数据流是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:tempMyFile.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);
}

相关内容

  • 没有找到相关文章

最新更新