C#: Dateiinfos für Files auf NTFS-Laufwerken ändern/setzen/bearbeiten

Wenn Sie die Dateiinfos zu beliebigen Dateien per Programm ändern möchten, stehen Sie erstmal vor einem Problem. Denn an diese Informationen kommen Sie nicht über das File-Objekt. Gerade für Suchmaschinen (beispielsweise im lokalen Intranet) sind diese Parameter jedoch sehr wichtig. Microsofts SharePoint beispielsweise indexiert alle Office-Dokumente nicht nur nach dem Inhalt, sondern eben auch anhand dieser Properties.
Im vorliegenden Beispiel haben wir hunderte von Dokumenten und eine Datenbank, in der die Meta-Informationen zu den betreffenden Files vorgehalten werden. Mit dem Einsatz von SharePoint müssen diese Meta-Informationen dem Dokument zugeordnet werden. Da dies eine einmalige Aktion ist, eignet sich hierfür einen Konsolenanwendung, die eine SQL-Abfrage durchführt, das Dokument öffnet und dann manipuliert. Im vorliegenden Beispiel beschränken wir uns auf die Manipulation der Properties.
Microsoft hat vor Jahren eine DLL namens „dsofile.dll“ veröffentlicht. Entgegen der Dokumentation kann die DLL nicht nur lesen, sondern die Properties auch speichern. Unter dem Knowledgebase-Artikel („http://support.microsoft.com/kb/224351/de“) können Sie die DLL kostenlos downloaden. Mit dabei sind zwei Beispiele, unter anderem eine VB6-Demo.
Laden Sie sich die DLL herunter, entpacken Sie die ZIP-Datei und registrieren Sie die DLL. In Visual Studio sollte nun unter „Verweise“ / „COM“ die DLL aufgeführt sein. Dann können Sie auf dsoFile zugreifen.

using System;
using System.Collections.Generic;
using System.Text;
using DSOFile;

namespace Intranet_Attribute
{
    class Program
    {
        static void Main(string[] args)
        {

            //Datei holen
            String filename = @"G:mein_pfad_zur_datei est.txt";

            try
            {

                DSOFile.OleDocumentProperties mydso = new DSOFile.OleDocumentProperties();
                mydso.Open(filename, false, dsoFileOpenOptions.dsoOptionDefault);
                DSOFile.SummaryProperties properties = mydso.SummaryProperties;

                //An den Filename kommen wir ebenfalls
                string name = mydso.Name;

                //Properties neu bestücken
                properties.Title = "Mein Titel";
                properties.Subject = "Mein Betreff";
                properties.Author = "Mein Autor";

                properties.Category = "Kathegorie";
                properties.Keywords = "Stichwörter";
                properties.Comments = "Kommentar";

                //änderungen speichern
                mydso.Save();
                return;
            }
            catch (Exception ex)
            {
                System.Environment.Exit(1);
            }

        }
    }
}

Wenn Sie die Properties einer Datei ändern, ändert sich auch das Datum der Datei im Dateisystem. So können Sie das Datum der Datei erhalten: öffnen Sie das File VOR dem ändern durch DSOFile mit:
file = new System.IO.FileInfo(filename);
Speichern Sie das Datum des Dokumentes in einer Datei:
string sAltesDatum = file.LastWriteTime.ToString();
ändern Sie die Properties der Datei entsprechend und ändern dann nach dieser Manipulation das Dokumentendatum aus der Variable „sAltesDatum“.

file = new System.IO.FileInfo(filename);

DSOFile.OleDocumentProperties mydso = new DSOFile.OleDocumentProperties();
mydso.Open(filename, false, dsoFileOpenOptions.dsoOptionDefault);
DSOFile.SummaryProperties properties = mydso.SummaryProperties;

//Altes Datum speichern
string sAltesDatum = file.LastWriteTime.ToString();

//Properties neu bestücken
properties.Title = "Mein ganz neuer Titel";

//Änderungen speichern
mydso.Save();

//Das Datum der Datei ändern
DateTime altesdatum = DateTime.Parse(sAltesDatum);
file.LastWriteTime = altesdatum;

Schreibe einen Kommentar