Съхраняване на метаданни извън файла: Някакъв стандартен подход в съвременния Windows?

Моето C# приложение синхронизира файлове от отдалечена система за управление на документи към файлова система.

Системата за управление на документи има метаданни (дата на последен одит, секретност, автор...), които са свързани с всеки файл, но не се съхраняват ВЪВ всеки файл.
Файловете могат да бъдат всякакви (bmp, xwd, pdf, неизвестен двоичен)

Искам да направя тези метаданни видими в локалната файлова система на Windows.
Но не мога да съхранявам метаданни ВЪВ всеки файл. Например, промяната на секретността на файл НЕ трябва да променя контролната сума на файла.

Какъв е най-добрият начин за съхраняване на тези метаданни?

Чувал съм за NTFS разширени файлови атрибути, дали това е нещо, което се отнася за моя сценарий? Този въпрос относно настройването на разширените свойства на файла съдържа всички отговори, които говорят за модифициране на самите файлове , което трябва да избягвам.

Ако няма стандартно решение, тогава ще съхранявам метаданните в локална база данни SQLite. Но наистина бих предпочел да използвам стандартно решение, така че други приложения (изследовател, приложения за галерия и т.н.) да могат да показват/променят свойствата, които разбират (като "автор")


person Nicolas Raoul    schedule 01.11.2012    source източник


Отговори (1)


Алтернативните потоци от данни са една от по-малко известните функции на 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 resource fork, т.е. позволява асоцииране на произволни данни с файлове, без те да са част от самия файл. 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);
}
person Ilmo Euro    schedule 01.11.2012
comment
Благодаря много! Второто решение работи само за OLE файлове, така че предполагам, че променя самия файл, за съжаление... Създадох отделен въпрос, за да разреша въпроса: stackoverflow.com/questions/13172949/ - person Nicolas Raoul; 02.11.2012