структура файла управления zip-архивом в FSharp - PullRequest
1 голос
/ 03 февраля 2011

ниже приведен пример кода, который берет список имен файлов и упаковывает их в один архив. У меня проблема в том, что я хотел бы, чтобы файл, описываемый filname, находился на верхнем уровне zip-архива (т. Е. Когда архив открыт, «clientName .... xml» - первое, что вы видите вместо папки «XML»).

    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)

1 Ответ

4 голосов
/ 03 февраля 2011

Откуда происходит тип ZipFile? Я не думаю, что это стандартный класс .NET ... Я попытался найти и нашел эту библиотеку http://dotnetzip.codeplex.com/, класс которой соответствует вашему примеру: -)

Упомянутая библиотека также имеет перегрузку AddFile, которая принимает две строки - имя исходного файла и относительное имя файла в ZIP-файле. Это похоже на то, что вы ищете. Я думаю, что вызов будет что-то вроде zipfile.AddFile(absolutePath, "/") ...

...