2010-05-17 8 views
5

Ich arbeite derzeit an einem Plugin für AutoCAD, mit dem Benutzer mit einer Anwendung zur Dokumentversionsverwaltung interagieren können, und um Dateien zwischen dem Remote-Repository und dem lokalen Computer synchronisieren zu können, hatte ich die Verwendung benutzerdefinierter Dateieigenschaften geplant. Die Eigenschaften werden festgelegt, wenn eine Datei zum ersten Mal heruntergeladen und dann so lange gespeichert wird, wie die Datei auf dem lokalen Laufwerk des Benutzers verbleibt. Ich bin nicht wirklich an einer AutoCAD-spezifischen Lösung interessiert, da sich mein Plugin mit anderen Dateien als AutoCAD-Zeichnungen (Textdateien, Bilddateien ua) befasst. Daher möchte ich eine Bibliothek, die so viele mögliche Dateitypen wie möglich verarbeiten kann.Warum werden benutzerdefinierte Dateieigenschaften, die mit der DSOFile-Bibliothek festgelegt wurden, nach dem Speichern nicht beibehalten?

Bei der Suche nach, wie diese Art von Ding in C# zu implementieren, stieß ich fast sofort auf die DSOFile-Bibliothek. Alles, was ich gelesen habe, sagte, dass es für MS Office entwickelt wurde, aber dass es mit jeder Datei funktionieren sollte, solange das Dateisystem NTFS ist (zumindest das ist mein Verständnis). Ich hatte keine Probleme, benutzerdefinierte Eigenschaften für Dateien wie Klartextdokumente (.txt), AutoCAD-Zeichnungen (.dwg) und Bilder (.jpg, .tif usw.) festzulegen. Mir ist jedoch aufgefallen, dass nach dem Speichern dieser Dateien die benutzerdefinierten Eigenschaften gelöscht wurden. Der einzige Fall, in dem benutzerdefinierte Eigenschaften nach dem Speichern angezeigt wurden, waren MS Office-Dokumente. Ich dachte, dass dieses Problem mit der Anwendung zusammenhing, die ich verwendete, um die Dateien zu speichern (AutoCAD, MS Paint, Notizblock, usw.), aber ich kann nicht 100% sicher sein. Bevor ich mich entschloss, mit einer anderen Lösung als der Verwendung von DSOFile zu arbeiten, wollte ich sehen, ob irgendjemand bei SO einen Einblick in dieses Problem hatte.

Ich testete mit meinem eigenen Code und mit der Demo, die mit DSOFile kommt, und sah das gleiche Ergebnis beide Male. Benutzerdefinierte Eigenschaften wurden nach dem Speichern eines beliebigen Dateityps außer einem MS Office-Dokument (Word und Excel) gelöscht. Hier

ist ein Beispiel ähnlich den Code, den ich benutzen würde eine neue benutzerdefinierte Eigenschaft hinzufügen ...

var docProperties = new OleDocumentProperties(); 
docProperties.Open("myfile.txt", false, dsoFileOpenOptions.dsoOptionDefault); 

try 
{ 
    object value = "some value"; 
    docProperties.CustomProperties.Add("MyCustomProp", ref value); 
} 

finally 
{ 
    docProperties.Close(true); // save and close 
} 
+0

DSOFile ist nur für MS Office-Dateien gedacht - es kann nicht für andere verwendet werden. –

+0

Es stellt sich heraus, dass es sein kann, aber dass, damit sie beibehalten werden können, die Anwendung, die die Datei speichert, speziell sicherstellen muss, dass diese Eigenschaften gespeichert werden. Probieren Sie das Demo-Programm aus, das mit DSOfile in einer Nicht-Office-Datei ausgeliefert wird, und Sie werden feststellen, dass es keine Probleme gibt, Eigenschaften für einen Dateityp abzurufen oder festzulegen. Soweit ich weiß, ist der Speichermechanismus für die Eigenschaften Teil des NTFS-Dateisystems und hat nichts mit Office zu tun. Office verwendet zufällig diese Eigenschaften und speichert explizit ihre Werte, wenn es eine Datei speichert, während Apps wie Notepad dies nicht tun. –

+0

So können Sie benutzerdefinierte Eigenschaften in einem Nicht-Office-Dokument speichern und beibehalten? Werden AutoCAD-Dateien im OLE-Format gespeichert? Kannst du darüber schreiben, wie du das machst? –

Antwort

0

Dies kann zu spät sein, aber ich habe das ein bisschen oder Autodesk Revit RFA-Dateien verwendet als gut als PDF-Dateien und es funktioniert gut. Sie können sie jedoch nicht bearbeiten, während die RFA geöffnet ist.

Haben Sie docProperties.Save() überhaupt aufgerufen?

+0

Soweit ich das beurteilen kann, scheint es von der Anwendung abhängig zu sein, die die Datei speichert. Wie bereits erwähnt, hatte ich keine Probleme beim Festlegen der Eigenschaften für eine Datei. Das einzige Mal, dass ich Probleme hatte, ist, wenn ich eine Datei mit AutoCAD (genauer gesagt, die 2010-Version) gespeichert habe. Was auch immer AutoCAD macht, wenn es eine Zeichnung speichert, löscht es diese Eigenschaftswerte. Es kann sehr gut mit Revit, Acrobat oder einer anderen Anzahl von Apps funktionieren. –

+0

ah Ich sehe, in meinem Fall bin ich in das Dokument geschlossen Ereignis in Revit und überschreiben die Eigenschaften, die ich jedes Mal neu, also auch wenn Revit wischt die Eigenschaften wie AutoCAD für Sie tat, wird es wieder hinzufügen . Ich glaube nicht, dass ich eine DSOFile-Instanz benutzt habe, wo das der Fall war, also bin ich nicht auf Ihr Problem gestoßen! Wenn ich die Chance bekomme, werde ich sehen, ob Revit es tut, nur aus Interesse. – RodH257

Verwandte Themen