我想确保我不会用我当前的项目重新发明轮子。我正在编写一个工具,为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);
}
答案 0 :(得分:0)
我相信以下软件已经合理地尝试解决您提到的问题:
http://www.oasys-software.com/products/document_management/columbus/ “Columbus使用强大的查看引擎,支持许多商业文件格式,包括Microsoft Office,AutoCAD *,MicroStation *和Hewlett Packard HPGL / 2.
逻辑相关的文件和文件夹可以收集在一个标题下,即使它们分布在办公室或地球仪周围的多个文件夹和服务器上*。 “
显然它已在61103家公司中使用......