2012-03-28 52 views
5

Tôi có một danh sách các tệp zip và rar trong một thư mục cục bộ.
Tất cả những gì tôi cần làm là trích xuất nội dung của tệp zip cũng như các tệp rar và lưu chúng trong một thư mục có cùng tên của tệp lưu trữ tương ứng.
Kể từ khi tôi mới đến as3, tôi không có đầu mối cho việc này.
Có thư viện nào không?




Cảm ơn trước ...Giải nén và lưu tệp bằng cách sử dụng as3?

+1

Bạn không thể thực hiện các thao tác tệp cục bộ mà không sử dụng AIR hoặc một cái gì đó giống như nó. Nếu bạn đang phát triển một ứng dụng cục bộ, lời khuyên của tôi đối với bạn là cố gắng viết những phần đó bằng một ngôn ngữ mạnh mẽ hơn như C++. Nhưng cũng có một cái gì đó như thế này http://codeazur.com.br/lab/fzip/ – HeyYO

Trả lời

6

Có một vài thư viện ra khỏi đó mà thỏa thuận với các tập tin ZIP trong AS3, nhưng hãy cẩn thận rằng đây là nhiệm vụ không dễ dàng cho người mới bắt đầu trong ActionScript 3.

  • dường như được sử dụng rộng rãi nhất, nhưng yêu cầu lưu trữ ZIP có tổng chi phí Adler32. Cung cấp với thư viện có một kịch bản Python mà tiêm checksum vào tập tin ZIP để tiền xử lý các tập tin trước khi giải nén chúng.

  • As3 port of JZlib, thư viện as3 để sử dụng với Fzip thay vì tập lệnh Python đã đề cập ở trên.

  • AS3 Zip Library (các bang tác giả đó là chậm hơn so với FZip) mà tránh được vấn đề Addler32 checksum.

  • Trên Adobe Air, bạn có thể xem giải thích chi tiết và ví dụ làm việc trong this article on the adobe website.

Hy vọng điều này sẽ hữu ích!

+2

Đối với hồ sơ, kể từ Flash Player 10 (tức là, thời gian dài trước đây) FZip không * không * yêu cầu kiểm tra tiêm nữa. Nó chỉ hoạt động. –

10

Để giải nén tệp zip, bạn có thể sử dụng AS3Commons Zip (trước đây gọi là FZip). Nó hoạt động mà không cần yêu cầu tổng kiểm tra Adler32 được đề cập trong câu trả lời trước.

Dưới đây là ví dụ về cách trích xuất tất cả các tệp trong lưu trữ zip. Hàm dưới đây sẽ được gọi khi một đối tượng URLLoader đã tải về các tập tin zip và cử một sự kiện Event.COMPLETE:

import org.as3commons.zip.Zip; 
import org.as3commons.zip.ZipFile; 

private function _onZipDownloaded(e:Event):void { 

    var ba:ByteArray = ByteArray(e.target.data); 
    var zip:Zip = new Zip(); 
    zip.loadBytes(ba); 

    for(var i:uint = 0; i < zip.getFileCount(); i++) { 

     var zipFile:ZipFile = zip.getFileAt(i); 
     var extracted:File = directory.resolvePath(zipFile.filename); 

     var fs:FileStream = new FileStream(); 
     fs.open(extracted, FileMode.WRITE); 
     fs.writeBytes(zipFile.content); 
     fs.close(); 

    } 

} 

Rõ ràng, kiểm tra lỗi nên được bổ sung vào mã ở trên nhưng bạn sẽ có được ý tưởng ...

+4

Đây phải là câu trả lời được chấp nhận. –

Các vấn đề liên quan