none
ZipArchive 使用的问题 RRS feed

  • 问题

  • 在使用 System.IO.Compression.ZipArchive 这个类处理zip文件的时候发现一个问题。

    比如现在需要new一个新的对象,

     System.IO.Compression.ZipArchive ziparchive = new System.IO.Compression.ZipArchive(streamWithWrongData);

    new它的时候,如果传入的流,数据不正确(比如文件损坏,或数据被修改了啥的。)它会卡在new 这里,

    并且一直从流的末尾向前读,一直读,不会停下来,直到内存溢出。

    试过在处理这个zip文件的线程里自己抛出异常来终止掉线程,结果没用,它继续读,

    之后在那个线程里 用 AutoResetEvent.WaitOne 来阻塞住,但是。。。根本挡不住啊,

    依然在读,貌似 ZipArchive 的 new 是用了另外的线程来处理的。

    这可就麻烦了,这里卡住了怎么办?

    照理说,读一小部分信息后就应该知道,这压缩档里的数据是错误的,就应该抛出异常来的,但事实上它就是没有,只是不停的向前读取。

    难道就只有退出程序了?

    2015年9月20日 15:11

答案

  • Hello nj_Fog,

    看了System.IO.Compression.ZipArchive 这个类的文档,没有具体说明是会用另外的线程来做。不过看你的问题描述,有可能是在另外的一个线程里做这个压缩操作了。

    >>难道就只有退出程序了?

    你可以把这个压缩的操作写在一个Task里,然后设置一个Task的超时时间,如果过了这个时间,那就把这个Task直接取消掉。

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年9月21日 5:20
    版主