我有一个以父目录开头的.zip文件。我需要从文件中读取该dir,然后搜索我的HD以查看该dir名称是否已存在。如果它存在,我然后删除它并将其替换为.zip文件的内容。
除了在没有实际解压缩文件的情况下读取.zip,我才能做到这一切。
.zip文件的大小可以超过2G,所以我想避免解压缩,然后读取目录,然后复制。
我不直接解压缩到该位置并强制覆盖的原因是,由于某种原因,当使用CopyHere
方法解压缩时,它忽略了通常会强制覆盖的开关,并仍然提示用户,如果他们想要覆盖。
解压缩文件的代码:
Set objSA = CreateObject("Shell.Application")
Set objSource = objSA.NameSpace(pathToZipFile).Items ()
Set objTarget = objSA.NameSpace(extractTo)
objTarget.CopyHere objSource,4
答案 0 :(得分:1)
这是关于SO的类似问题 How to list the contents of a .zip folder in c#?
我自己用过这个图书馆。它运行良好,http://dotnetzip.codeplex.com/,甚至还有一个树视图示例,可以在不提取的情况下读取zip。
您将需要服务器上的DLL,但我不会说您必须安装它们。 ;)
答案 1 :(得分:0)
我不确定是否可以在不提取拉链的情况下读取zip的内容。
如果您只是想避免对数据进行耗时的复制操作,可以尝试解压缩到临时目录,然后使用“移动”功能。移动通常比复制耗时少,因为它实际上不会重写磁盘上的数据。它只是更新文件系统以指向数据所在的位置。
答案 2 :(得分:0)
假设您可以使用外部应用程序,请尝试下载7Zip,然后让脚本使用-l
开关执行它。这应该会给你一些你应该能够以某种方式解析的输出。
帮助文件中的示例:7z l archive.zip
答案 3 :(得分:0)
您可以在For Each
对象上使用objSource
,例如:
Dim objSA, objSource, item
Set objSA = CreateObject("Shell.Application")
Set objSource = objSA.NameSpace(pathToZipFile).Items ()
For Each item in objSource
WScript.Echo item
Next