目前,我在使用 SharpZip api 来处理我的 zip 文件实体。它压缩和解压缩时工作很出色。不过,我遇到的麻烦是如何确定文件是不是 zip 。我需要知道是否有一种方法探测文件流是否可以被解压缩。最初我使用如下方式:
FileStream lFileStreamIn = File.OpenRead(mSourceFile);
lZipFile = new ZipFile(lFileStreamIn);
ZipInputStream lZipStreamTester = new ZipInputStream(lFileStreamIn, mBufferSize);// not working
lZipStreamTester.Read(lBuffer, 0, 0);
if (lZipStreamTester.CanDecompressEntry)
{
每次 LZipStreamTester 都变为null 并且if语句失败, 有没有 buffer的情况我都尝试了。谁能告诉我为什么,或者别的任何见解吗?我知道可以检查文件扩展名。我需要一些比这更为明确的方法。我也意识到 zip 具有神奇的 #(PK ), 但是并不能保证总是存在,因为这并不是必须的格式。
我也读到 .net 4.5有原生zip支持,所以我的项目可能会迁移到 .net 4.5 ,替换掉sharpzip。但是在这里我仍然没有看到类似CanDecompressEntry的方法/参数: http://msdn.microsoft.com/en-us/library/3z72378a%28v=vs.110%29
最后我只能使用try catch尝试解压文件。
3票 |
这是一个处理数据解压缩,PKZIP压缩(sharpziplib)或GZip压缩(在. net创建)组件的基类。可能比你需要的功能多一点。这是一个使用@PhonicUK的建议来解析数据流的头的例子。你看到的工厂方法中的派生类是用来处理PKZip和GZip解压缩的细节。
|
7票 |
你也可以这样:
ZIP文件总是从0x04034b50开始作为它的前4个字节( http://en.wikipedia.org/wiki/Zip_(file_format)#File_headers ) |
6票 |
参考http://stackoverflow.com/a/16587134/206730 链接
参考下面链接: icsharpcode-sharpziplib-validate-zip-file How-to-check-if-a-file-is-compressed-in-c# ZIP文件总是从0x04034b50开始(4 bytes)查看更多: http://en.wikipedia.org/wiki/Zip_(file_format)#File_headers 使用例子:
|
2票 |
如果你是web网络编程,你可以检查文件Content Type: application/zip
|