2010-07-22 2 views
1

Я хотел бы убедиться, что я не изобретаю колесо с моим текущим проектом. Я пишу инструмент, который создает каталог контента для CAD-программы, которая каталогизирует файлы.Есть ли существующие библиотеки библиотек файлов?

Класс Catalog представляет собой иерархическую структуру файлов и папок. Файлы в каталоге могут содержать дополнительные метаданные, которые не должны изменять фактический файл. Эти метаданные могут также включать другие файлы, такие как миниатюры или вложения. Каталоги предоставляют интерфейс для типичных взаимодействий CRUD, а также позволяют создавать файлы (вместе со своими метаданными) для копирования между каталогами.

Я пытаюсь отвлечь интерфейс от каталога до того места, где его можно было хранить практически в любом месте. Например, сейчас я создаю формат каталога, который хранится в файловой системе. Файлы метаданных, такие как миниатюры и вложения, хранятся в файлах sidecar в папке каталога, а остальные данные каталога хранятся в файле XML в корне каталога каталога. Тем не менее, я пытаюсь отнести класс Catalog к той точке, где я мог бы создавать версии, которые хранятся в SQL Server, HTTP-сервере, ZIP-файле, двоичном файле и т. Д. И т. Д.

Таким образом, вместо этого ссылаясь на файлы по пути к диску Я использую System.IO.Stream как наиболее абстрактное представление двоичных данных. В конечном итоге я хочу создать интерфейс перетаскивания, где пользователи могут перемещать файлы между каталогами любого формата. Это довольно сложно, так как перемещение файла между каталогами также требует перемещения связанных файлов метаданных. Поэтому я также пытаюсь выяснить систему транзакций, которая обеспечит завершение всех или ни одного из запрошенных действий File IO.

Интерфейс ICatalog приведен ниже для справки. Надеюсь, это обеспечит лучшее представление о том, чего я пытаюсь достичь. Так или иначе, теперь мне интересно, изобретаю ли я колесо, или если есть какие-то существующие инструменты или библиотеки, которые обеспечивали аналогичную функциональность.

interface ICatalog 
{ 
    string Location { get; } 
    string Name { get; set; } 

    //NOTE: File is not System.IO.File, but a custom class 
    System.Collections.Generic.IEnumerable<File> GetFiles(); 
    System.Collections.Generic.IEnumerable<File> GetFiles(string relativeFolderPath, bool recursiveSearch); 

    ITransaction ImportNewFile(File f, System.IO.Stream sourceDataStream); 
    ITransaction CopyFileTo(File f, string destRelativePath); 
    ITransaction DeleteFile(string relativePath); 
    ITransaction MoveFile(File f, string destRelativePath); 

    event EventHandler<Catalog.FileAddedEventArgs> FileAdded; 
    event EventHandler<Catalog.FileRemovedEventArgs> FileRemoved; 

    System.Collections.Generic.IEnumerable<string> Folders { get; } 
    ITransaction AddFolder(string relativePath); 
    ITransaction DeleteFolder(string relativePath); 

    event EventHandler<Catalog.FolderAddedEventArgs> FolderAdded; 
    event EventHandler<Catalog.FolderRemovedEventArgs> FolderRemoved; 

    void WriteMetaDataFile(File file, string relPath, System.IO.Stream dataStream, bool overwrite); 
    System.IO.Stream ReadMetaDataFile(File file, string relPath); 
    ITransaction DeleteMetaDataFile(File file, string relPath); 

    System.Collections.Generic.IList<ICleanUpTransaction> GetCleanUpTransactions(ProgressUpdateDelegate callbackDelegate); 

    void RefreshFilesStatus(ProgressUpdateDelegate callbackDelegate); 
    void SaveAndClose(ProgressUpdateDelegate callbackDelegate); 
} 
+0

Несколько вещей, которые выпрыгивают на меня: 1) используя «Файл», где я могу использовать «CatalogItem» (возможно, я слишком семантичен) и 2) I подумайте, что вы должны разбить это на ICкаталог для функций метаданных и ICatalogItem для определенных файлов. Это позволит вам реализовать различные части функциональности по-разному. – overslacked

ответ

0

Я считаю следующее peice программного обеспечения сделало разумную попытку решения проблемы вы упоминаете:

http://www.oasys-software.com/products/document_management/columbus/ «Колумб использует мощный просмотр двигатель и поддерживает множество коммерческих форматов файлов, включая Microsoft Office, AutoCAD *, MicroStation * и Hewlett Packard HPGL/2.

Логически связанные файлы и папки могут быть собраны под одним заголовком, даже если они распределены по нескольким папкам и серверам по всему офису или земному шару *. "

, очевидно, он используется в 61103 компаниях ...

Смежные вопросы