[英]Cannot extract the contents of a TGZ file using F# and SharpZipLib
我正在學習 F# 和 Deedle。 我正在嘗試使用 SharpZipLib 提取此TGZ 文件的內容。 我將 TGZ 下載到我的本地驅動器。 我認為我很接近,因為 out1 有效,但 out2 出錯。 我確信使用 pipe 轉發或組合可以更好地編寫代碼,但它首先需要工作。 有人有什么想法嗎?
open ICSharpCode.SharpZipLib.GZip
open ICSharpCode.SharpZipLib.Tar
let extract path filename =
let fullpath = Path.Combine(path, filename)
let inSt = File.OpenRead(fullpath)
let gSt = new GZipInputStream(inSt)
let tar = TarArchive.CreateOutputTarArchive(gSt)
let out1 = tar.ListContents
let out2 = tar.ExtractContents(path)
out2
extract "C:/Downloads/" "dragontail-12.4.1.tgz"
這是錯誤:
Error: System.NullReferenceException: Object reference not set to an instance of an object.
at ICSharpCode.SharpZipLib.Tar.TarArchive.ExtractContents(String destinationDirectory, Boolean allowParentTraversal) in /_/src/ICSharpCode.SharpZipLib/Tar/TarArchive.cs:line 620
at ICSharpCode.SharpZipLib.Tar.TarArchive.ExtractContents(String destinationDirectory) in /_/src/ICSharpCode.SharpZipLib/Tar/TarArchive.cs:line 600
at FSI_0104.extract(String path, String filename)
at <StartupCode$FSI_0104>.$FSI_0104.main@()
這有幫助嗎?
https://stackoverflow.com/a/52200001/1594263
看起來您應該使用 CreateInputTarArchive()。 我修改了您的示例以使用 CreateInputTarArchive(),它對我有用。
順便說一句,您只是將 function 分配給 out1,您實際上並沒有調用 ListContents()。
我不是 SharpZipLib 專家,但這對我有用:
use tar = TarArchive.CreateInputTarArchive(gSt, System.Text.Encoding.UTF8)
tar.ExtractContents(path, true)
我認為您必須明確允許路徑遍歷才能解壓縮到絕對路徑中。 請參閱此文件中的 SharpZipLib 單元測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.