1

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

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

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

因此,我使用 System.IO.Stream 作为二进制数据的最抽象表示,而不是通过磁盘路径引用文件。最终,我希望能够创建一个拖放界面,用户可以在其中在任何格式的目录之间移动文件。这变得相当复杂,因为在目录之间移动文件还需要移动相关的元数据文件。因此,我还试图找出一个事务系统,以确保所有或没有请求的文件 IO 操作完成。

我的 IDatalog 界面如下所示,以供参考。希望它能更好地了解我正在努力完成的工作。所以无论如何,现在我想知道我是否在重新发明轮子,或者是否有任何现有的工具或库提供类似的功能。

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);
}
4

1 回答 1

0

我相信以下软件在解决您提到的问题方面做出了合理的尝试:

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

逻辑相关的文件和文件夹可以集中在一个标题下,即使它们分布在办公室或全球的多个文件夹和服务器中*。"

显然它被用于61103公司......

于 2010-08-08T22:08:12.633 回答