2

私のC#アプリは、リモートドキュメント管理システムからファイルシステムにファイルを同期します。

ドキュメント管理システムには、各ファイルに関連付けられているが各ファイル内に保存されていないメタデータ(最後の監査の日付、機密性、作成者など)があります。
ファイルは何でもかまいません(bmp、xwd、pdf、不明なバイナリ)

これらのメタデータをローカルのWindowsファイルシステムに表示したいと思います。
しかし、各ファイル内にメタデータを保存することはできません。たとえば、ファイルの機密性を変更しても、ファイルのチェックサムを変更してはなりません。

このメタデータを保存するための最良の方法は何ですか?

NTFS拡張ファイル属性について聞いたことがありますが、それは私のシナリオに当てはまるものですか?拡張ファイルのプロパティの設定に関するこの質問には、ファイル自体の変更に関するすべての回答がありますが、これは避ける必要があります。

標準的な解決策がない場合は、メタデータをローカルのSQLiteデータベースに保存します。ただし、他のアプリ(エクスプローラー、ギャラリーアプリなど)が理解できるプロパティ(「作成者」など)を表示/変更できるように、標準ソリューションを使用することを強くお勧めします。

4

1 に答える 1

3

代替データストリームは、NTFSのあまり知られていない機能の1つです。ページからの引用:

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 に答える