Существуют ли какие-либо абстрактные библиотеки каталогов файлов? - PullRequest
1 голос
/ 23 июля 2010

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

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

Я пытаюсь абстрагировать интерфейс к каталогу до такой степени, чтобыэто могло быть сохранено почти где угодно.Например, сейчас я создаю формат каталога, который хранится в файловой системе.Файлы метаданных, такие как миниатюры и вложения, хранятся в дополнительных файлах в папке каталога, а остальные данные каталога хранятся в файле 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);
}

1 Ответ

0 голосов
/ 09 августа 2010

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

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

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

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

...