2010-07-22 6 views
1

저는 현재 프로젝트에서 휠을 재발 명하지 않도록하고 싶습니다. 필자는 파일을 카탈로그 화하는 CAD 프로그램 용 컨텐츠 카탈로그를 작성하는 툴을 작성하고 있습니다.기존 파일 카탈로그 라이브러리가 있습니까?

Catalog 클래스는 파일과 폴더의 계층 구조를 나타냅니다. 카탈로그의 파일에는 실제 파일을 수정해서는 안되는 추가 메타 데이터가있을 수 있습니다. 이 메타 데이터에는 축소판 또는 첨부 파일과 같은 다른 파일도 포함될 수 있습니다. 카탈로그는 일반적인 CRUD 상호 작용을위한 인터페이스를 제공하며 파일 (메타 데이터와 함께)이 카탈로그간에 복사되도록 허용해야합니다.

저는 거의 모든 곳에서 저장할 수있는 지점까지 카탈로그에 대한 인터페이스를 추상화하려고합니다. 예를 들어 지금은 파일 시스템에 저장된 카탈로그 형식을 만들고 있습니다. 축소판 및 첨부 파일과 같은 메타 데이터 파일은 카탈로그 폴더 내의 사이드카 파일에 저장되고 나머지 카탈로그 데이터는 XML 파일의 카탈로그 폴더 루트에 저장됩니다. 그러나 SQL Server, HTTP 서버, ZIP 파일, 바이너리 파일 등 ..에 저장된 버전을 만들 수있는 지점으로 Catalog 클래스를 추상화하려고합니다.

따라서 다음을 참조하십시오. 디스크 경로별로 파일 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

"FileItem"(아마도 나는 의미 론적입니다)을 사용할 수있는 곳에서 "파일"을 사용하는 경우가 2 개 있습니다. 메타 데이터 함수에 대해서는 ICatalog로, 특정 파일에 대해서는 ICatalogItem으로 분해해야한다고 생각합니다. 이렇게하면 다양한 방식으로 기능의 다른 부분을 구현할 수 있습니다. – overslacked

답변

0

난 당신이 언급 소프트웨어의 다음의 peice 문제를 해결하는 합리적인 시도를 가지고 있다고 생각합니다 :

http://www.oasys-software.com/products/document_management/columbus/ 는 "콜럼버스가 강력한보기 엔진을 활용 및 Microsoft Office 등 많은 상용 파일 형식을 지원, AutoCAD *, MicroStation * 및 Hewlett Packard HPGL/2

논리적으로 관련된 파일과 폴더는 사무실이나 지구 주위의 여러 폴더와 서버에 퍼져 있어도 하나의 제목 아래에 모일 수 있습니다 *. "

분명히 그것은 61103 개의 회사에서 사용되었습니다 ...

관련 문제