2010-05-17 14 views
5

Şu anda kullanıcıların bir belge sürüm oluşturma uygulaması ile etkileşime girmesine izin veren ve uzak depo ile yerel makine arasında dosyaları eşitlemek için AutoCAD eklentisi üzerinde çalışıyorum, özel dosya özelliklerini kullanmayı planlamıştım. Bir dosya ilk olarak indirildiğinde özellikler ayarlanır ve ardından dosya kullanıcının yerel sürücüsünde kaldığı sürece devam eder. AutoCAD'e özel bir çözümle pek ilgilenmiyorum çünkü eklentim AutoCAD çizimleri (metin dosyaları, resim dosyaları, diğerleri) dışındaki dosyalarla ilgileniyor. Bu nedenle, olabildiğince çok potansiyel dosya türlerini işleyebilecek bir kütüphane istiyorum.DSOFile kitaplığı kullanılarak ayarlanan özel dosya özellikleri neden kaydedildikten sonra devam etmiyor?

Bu tür bir şeyin C# içinde nasıl uygulanacağını ararken, hemen DSOFile kitaplığına rastladım. Okuduğum her şey, MS Office için tasarlanmış olduğunu söyledi, ancak dosya sistemi NTFS (en azından benim anlayışım) olduğu sürece herhangi bir dosya ile çalışması gerekir. Düz metin belgeleri (.txt), AutoCAD çizimleri (.dwg) ve resimler (.jpg, .tif, vb.) Gibi dosyalarda özel özellikler belirlerken sorun yaşamadım. Ancak, bu dosyalardan herhangi birinin kaydedildiğini, özel özelliklerin silindiğini fark ettim. Özel mülkleri kaydettikten sonra kaydettiğim tek durum, MS Office belgeleri üzerinde yapıldı. Bu sorunun dosyaları (AutoCAD, MS Paint, notepad, vb.) Kaydetmek için kullandığım uygulama ile ilgili olduğunu düşündüm, ancak bunun% 100 emin olamıyorum. DSOFile'ı kullanmanın dışında bir çözüm bulmaya karar vermeden önce, SO üzerinde herhangi bir kimsenin bu konuyla ilgili bir fikir sahibi olup olmadığını görmek istedim.

Kendi kodumu kullanarak ve DSOFile ile gelen demoyu kullanarak test ettim ve aynı sonucu iki kez gördüm. MS Office (Word ve Excel) belgesi dışındaki herhangi bir dosya türünü kaydettikten sonra özel özellikler silinmiştir. İşte

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 yalnızca MS Office dosyaları içindir - başkaları için kullanılamaz. –

+0

Bunun olabileceği ortaya çıkıyor, ancak bunların kalıcı olması için dosyanın kaydedilmesi uygulaması özellikle bu özelliklerin kaydedildiğinden emin olmalıdır. Devam edin ve ofis dışı bir dosyada DSOfile ile birlikte gelen demo programını deneyin ve herhangi bir dosya türü için özellik almanın veya ayarlamada sorun olmadığını göreceksiniz. Bildiğim kadarıyla, özellikler için depolama mekanizması NTFS dosya sisteminin bir parçasıdır ve ofisle hiçbir ilgisi yoktur. Office sadece bu özellikleri kullanır ve bir dosyayı kaydettiğinde değerlerini açıkça kaydeder, oysa Notepad gibi uygulamalar yapmaz. –

+0

Böylece, özel mülkleri Office dışı bir belgeye kaydedebilir ve bunların kalıcı olmasını sağlayabilirsiniz? AutoCAD dosyaları OLE Yapısal Depolama biçiminde kaydedilir mi? Bunu nasıl yaptığın hakkında mesaj gönderebilir misin? –

cevap

0

Bu çok geç olabilir ama bu biraz ya Autodesk Revit RFA dosyaları kullandım ... Ben yeni bir özel özellik eklemek için kullanacağı koduna benzer bir örnektir PDF dosyaları gibi iyi çalışıyor. RFA açıkken onları düzenleyemezsiniz.

docProperties.Save() yöntemini çağırdınız mı?

+0

Anlatabildiğim kadarıyla, dosyayı kaydeden uygulamaya bağımlı görünüyor. Daha önce de belirtildiği gibi, herhangi bir dosya için özellikleri belirleyen hiçbir sorunum olmadı. AutoCAD (daha spesifik olarak, 2010 sürümü) kullanarak bir dosya kaydettiğimde tek sorun yaşamaya başladım. Bir çizimi kaydettiğinde AutoCAD ne yapıyorsa yapın, bu özellik değerlerini siliyor. Revit, Acrobat veya başka herhangi bir uygulama ile çok iyi çalışabilir. –

+0

ah, gördüğümde, Revit'teki belge kapalı etkinliğine giriyorum ve her seferinde istediğim özellikleri yeniden yazıyorum, bu yüzden Revit AutoCAD'in sizin gibi özellikleri silse bile, bunları yeniden ekleyecektir . Durumun DSOFile'ı kullanarak benim bir örneğim olduğunu düşünmüyorum, bu yüzden senin probleminle karşılaşmadım! Şansı bulduğumda, Revit'in yapıp yapmadığını görebiliyorum. – RodH257