2011-02-02 2 views
1

다음은 파일 이름 목록을 사용하여 단일 아카이브로 압축하는 코드 샘플입니다. 내가 가지고있는 문제는 filname에 의해 기술 된 파일이 zip 아카이브의 최상위 레벨에 있어야한다는 것입니다 (즉, 아카이브가 열리면 "clientName .... xml"이 가장 먼저 보게됩니다. 폴더 "XML"대신).FSharp의 zip 아카이브의 제어 파일 구조

let filename = sprintf "C:\\XML\\ClientName_%s.xml" (System.DateTime.Now.ToString("ddMMyyyy"))  
    use fs = new FileStream(filename, FileMode.Create) 
    let xmlSerializer = XmlSerializer(typeof<log>) 
    xmlSerializer.Serialize(fs,logObj) 
    fs.Close() 
    use zipfile = new ZipFile() 
    let basePath = path.Replace("/", "\\") 

    for fileObj in files do 
     let relativeFilePath = basePath + (fileObj.Filename).Replace("/", "\\") 
     printfn "%s" relativeFilePath 
     zipfile.AddFile(relativeFilePath) |> ignore 
     () 

    zipfile.AddFile(filename) |> ignore 
    let zipFileName = sprintf "C:\\XML\\Compliance_%s.zip" (System.DateTime.Now.ToString("ddMMyyyy")) 
    zipfile.Save(zipFileName) 

답변

4

ZipFile 유형의 출처는 무엇입니까? 나는 이것이 표준 .NET 클래스라고 생각하지 않습니다 ... 검색을 시도하고이 라이브러리를 찾았습니다 :-) 귀하의 샘플과 일치하는 클래스가 있습니다

언급 된 라이브러리는 또한 AddFile 두 개의 문자열 소스 파일 이름과 ZIP 파일의 상대 파일 이름. 이것은 정확히 당신이 찾고있는 것과 같습니다. 나는 전화가 같을 것이라고 짐작한다 zipfile.AddFile(absolutePath, "/") ...

+0

감사합니다! – Ramy