http://www.7-zip.org/sdk.html 这个网站提供了一个用于压缩/解压缩文件的LZMA SDK,我想试一试,但我迷路了.
有人有这方面的经验吗?还是教程?谢谢.
我正在考虑使用7-Zip格式来打包我的应用程序文件,因为它是一种非常紧凑和流行的格式.但是,我找不到一些关于如何使用C++ SDK的教程.我想要一些教我如何:
如何阅读和保存7z的内容.我使用Python 2.7.9,我可以像这样提取或存档,但我无法读取python中的内容,我只在CMD中列出文件的内容
import subprocess
import os
source = 'filename.7z'
directory = 'C:\Directory'
pw = '123456'
subprocess.call(r'"C:\Program Files (x86)\7-Zip\7z.exe" x '+source +' -o'+directory+' -p'+pw)
Run Code Online (Sandbox Code Playgroud) 我想解压缩一个.7z文件.根据这个问题,我可以使用 lzma包来做到这一点.
我期待着类似的东西
import lzma
#...
with lzma.open('myFile.7z') as f:
f.extractall('.')
Run Code Online (Sandbox Code Playgroud)
要将文件解压缩到当前目录中,但似乎不存在这样的事情.尝试类似的东西
import lzma
#...
with lzma.open('myFile.7z') as f:
file_content = f.read()
print(file_content)
Run Code Online (Sandbox Code Playgroud)
确实屈服了_lzma.LZMAError: Input format not supported by decoder
.我该如何检查格式?我很惊讶,因为我认为7zip和.7z格式都是开源的,而python应该支持所有内容.
我看到很多答案,人们只是用子进程调用7zip可执行文件,但这不是我想做的.我正在寻找一个简单的python3解决方案.
只是想知道是否有人尝试使用7-zip的7za.exe将zip文件解压缩到其他位置
7za.exe x sample.zip c:\Temp
Run Code Online (Sandbox Code Playgroud)
给出错误
Cannot use absolute pathnames for this command
Run Code Online (Sandbox Code Playgroud) 在我保持的程序中,它完成如下:
# count the files in the archive
length = 0
command = ur'"%s" l -slt "%s"' % (u'path/to/7z.exe', srcFile)
ins, err = Popen(command, stdout=PIPE, stdin=PIPE,
startupinfo=startupinfo).communicate()
ins = StringIO.StringIO(ins)
for line in ins: length += 1
ins.close()
Run Code Online (Sandbox Code Playgroud)
错误检查怎么样?是否足以将其修改为:
proc = Popen(command, stdout=PIPE, stdin=PIPE,
startupinfo=startupinfo)
out = proc.stdout
# ... count
returncode = proc.wait()
if returncode:
raise Exception(u'Failed reading number of files from ' + srcFile)
Run Code Online (Sandbox Code Playgroud)
或者我应该实际解析Popen的输出?
编辑:对7z,rar,zip档案(7z.exe支持)感兴趣 - 但7z和zip对于初学者来说已经足够了
我找不到一个,我不知道PHP Compression和Archive Extensions是否有效.
你认为我可以使用压缩流来读取7z文件中的数据吗?
UPDATE
我已经尝试了很多不同的方法来做到这一点,它们都会导致同样的错误.这是一组命令:
$s = New-PSsession -ComputerName ServerA
$job = Invoke-Command -Session $s -Scriptblock { Start-Process -FilePath
"C:\Scripts\ArchiveEventLogs\ver4.5\7za.exe" -ArgumentList "a",
"C:\Scripts\Eventlogs.bak\ServerA-20101111.7z", "C:\Scripts\Eventlogs.bak\*.evt*",
"-mx7", "-oC:\Scripts\Eventlogs.bak", "-wC:\Scripts\Eventlogs.bak", "-t7z" -Wait }
-AsJob
Get-Job | Wait-Job
Receive-Job Job$
Run Code Online (Sandbox Code Playgroud)
我得到的输出是这样的:
7-Zip (A) 9.17 beta Copyright (c) 1999-2010 Igor Pavlov 2010-10-04
Scanning
Creating archive C:\Scripts\Eventlogs.bak\ServerA-20101111.7z
ERROR: Can't allocate required memory!
Run Code Online (Sandbox Code Playgroud)
我怎么能通过那个错误?
我应该指出,如果我直接在没有远程处理的ServerA上运行Scriptblock,它就可以工作.谢谢你的帮助!
我有一个使用7zFM(文件管理器)管理的.7z存档,我可以轻松地将对象添加到此存档中.但是,存档中的对象使用AES进行加密,就像我希望的那样,但是当我添加新内容时,我似乎无法在存档中为该文件添加加密,除非我解密整个存档,然后重新进行处理.
是否有一种简单的方法可以在.7z存档中添加特定文件的加密或删除加密?
我想从一个7-zip字节流中提取一些文件,它不能存储在硬盘上,所以我不能使用RandomAccessFile类,我已经阅读了sevenzipjbinding源代码,它还用一些封闭的源代码解压缩文件比如lib7-Zip-JBinding.so用其他语言写的.和官方包SevenZip的方法一样
SevenZip.Compression.LZMA.Decoder.Code(java.io.InputStream inStream,java.io.OutputStream outStream,long outSize,ICompressProgressInfo progress)
只能解压缩单个文件.
那么如何用纯Java解压缩7-zip字节流呢?
有人有解决方案吗?
抱歉我的英语不好,我在网上等你的答案.
7zip ×10
compression ×2
java ×2
python-2.7 ×2
archive ×1
c ×1
c++ ×1
lzma ×1
php ×1
popen ×1
powershell ×1
python ×1
python-3.x ×1
subprocess ×1