1

以下は、ファイル名のリストを取得し、それらを 1 つのアーカイブに圧縮するコード サンプルです。私が抱えている問題は、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)
4

1 に答える 1

4

ZipFileタイプはどこから来たのですか?これは標準の.NETクラスではないと思います...検索してみたところ、サンプルに一致するクラスを持つこのライブラリhttp://dotnetzip.codeplex.com/が見つかりました:-)

上記のライブラリにはAddFile、ソースファイル名とZIPファイル内の相対ファイル名の2つの文字列を使用するオーバーロードもあります。これはあなたが探しているものとまったく同じようです。呼び出しは次のようなものになると思いzipfile.AddFile(absolutePath, "/")ます...

于 2011-02-02T22:43:19.433 に答える