是否有任何现有的抽象文件目录库?

时间:2010-07-22 23:09:17

标签: c# .net libraries catalog

我想确保我不会用我当前的项目重新发明轮子。我正在编写一个工具,为CAD程序创建内容目录,对目录文件进行编目。

我的Catalog类表示文件和文件夹的层次结构。目录中的文件可以包含与其一起存储的其他元数据,这些元数据不应修改实际文件。此元数据还可以包括其他文件,例如缩略图或附件。目录为典型的CRUD交互提供了一个接口,并且还应允许在目录之间复制文件(及其元数据)。

我正在尝试将接口抽象到目录,以便几乎可以存储在任何地方。例如,我现在正在创建一个存储在文件系统上的目录格式。缩略图和附件等元数据文件存储在目录文件夹中的sidecar文件中,其余目录数据存储在目录文件夹根目录下的XML文件中。但是,我正在尝试将Catalog类抽象到我可以创建存储在SQL Server,HTTP服务器,ZIP文件,二进制文件等中的版本等等。

因此,而不是通过磁盘路径引用文件我使用System.IO.Stream作为二进制数据的最抽象表示。最终,我希望能够创建一个拖放界面,用户可以在任何格式的目录之间移动文件。这变得相当复杂,因为在目录之间移动文件也需要移动相关的元数据文件。所以我也试图弄清楚一个事务系统,它将确保完成所有请求的文件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 :(得分:0)

我相信以下软件已经合理地尝试解决您提到的问题:

http://www.oasys-software.com/products/document_management/columbus/ “Columbus使用强大的查看引擎,支持许多商业文件格式,包括Microsoft Office,AutoCAD *,MicroStation *和Hewlett Packard HPGL / 2.

逻辑相关的文件和文件夹可以收集在一个标题下,即使它们分布在办公室或地球仪周围的多个文件夹和服务器上*。 “

显然它已在61103家公司中使用......