Tại sao các tệp 7-zip / WinRAR giải nén tệp vào temp tem trước khi di chuyển chúng đến đích?


50

Tại sao các tệp 7-zip / WinRAR giải nén thành "temp" trước khi di chuyển chúng đến đích?

Tôi không thấy bất kỳ lợi thế nào so với việc chỉ trực tiếp mở khóa đến đích. Nó thực sự gây khó chịu, đặc biệt là đối với các tệp lớn (như bây giờ!).


Biên tập:

Hãy giải thích tại sao chúng không được thực hiện tại chỗ .


3
Nếu bạn chỉ định `` là thư mục tạm thời trong WinRAR, thì nó sẽ trích xuất trực tiếp đến đích.

Câu trả lời:


82

Làm thế nào chính xác là bạn đang giải nén các tập tin? Bạn đang sử dụng dòng lệnh hoặc GUI? Bạn đang kéo các tập tin hoặc chọn chúng và sử dụng chức năng giải nén? Bạn đang sử dụng trình đơn ngữ cảnh shell-extension?

Nếu bạn nhập thư mục đích và sau đó chọn chức năng giải nén hoặc sử dụng tiện ích mở rộng shell, thì trước tiên chúng không giải nén vào thư mục tạm thời, chúng sẽ trích xuất trực tiếp đến đích.

Nếu bạn chọn các tệp trong UI và kéo chúng vào thư mục đích, thì nó sẽ trích xuất vào một thư mục tạm thời.

Lý do là làm thế nào các điểm đến được chọn. Nếu bạn nhập thư mục đích hoặc sử dụng mục menu ngữ cảnh, thì chương trình sẽ biết chính xác nơi cần trích xuất. Tuy nhiên, nếu bạn chỉ kéo các tệp, thì do cách hoạt động của chức năng kéo và thả của OLE , chương trình không biết thư mục đích ở đâu. Nói cách khác, đó là Explorernhận được thư mục đích, không phải chương trình lưu trữ. Do đó, chương trình không thể biết trích xuất chúng ở đâu và do đó chỉ cần trích xuất chúng vào thư mục tạm thời, sau đó Explorer di chuyển chúng sau khi hoàn tất. Bạn có thể thấy rõ điều này bằng cách trích xuất một tệp lớn bằng cả hai phương pháp. Khi bạn kéo nó ra một thư mục, nó sẽ giải nén, sau đó bạn thấy hộp thoại thao tác tệp tiêu chuẩn của Explorer di chuyển nó vào thư mục. Nếu bạn chỉ định thư mục và nhấp vào Trích xuất, nó sẽ trích xuất và không xử lý thêm được thực hiện.

Vui lòng kiểm tra mã nguồn cho 7-Zip để xem cách xử lý vị trí trích xuất.


Tôi đã học được điều này một cách khó khăn vài năm trước khi tôi muốn thực hiện kéo và thả trong một chương trình tôi đang viết.


7
Hoàn toàn rực rỡ - cảm ơn vì điều này! Điều này đã gây khó khăn cho tôi trong nhiều năm, nhưng tôi chưa bao giờ dành thời gian để theo dõi "cái gì" và tại sao ". Những lần kỳ lạ tôi tìm thấy thư mục C: temp của mình được điền vào whazoo, tôi đi qua các tùy chọn của Winrar để tìm nó ở đâu phải được đặt thành trích xuất đầu tiên vào thư mục tạm thời trên C: Nhưng than ôi, tôi không tìm thấy nó. Tôi chưa bao giờ kết nối mối tương quan giữa hai phương pháp và bây giờ đánh giá cao việc nhìn thấy ánh sáng :) Cảm ơn!
Coldblackice

2
Một điều sai ở đây là Explorer không di chuyển tệp mà chỉ sao chép nó. Điều này thực sự gây khó chịu vì di chuyển rất nhanh (ngoại trừ khi chuyển từ phân vùng này sang phân vùng khác) và đáng lẽ phải là lựa chọn lý tưởng (không lãng phí không gian), nhưng những kẻ ngốc tại Microsoft nghĩ rằng nên sao chép từ thư mục tạm thời sau đó chỉ để lại dữ liệu thư mục tạm thời nằm xung quanh. Không chỉ việc trích xuất một kho lưu trữ khổng lồ sẽ chiếm gấp đôi dung lượng, mà còn mất gần gấp đôi thời gian!
ADTC

Họ có thể có một lý do chính đáng cho điều đó, và có thể là do một số hạn chế của hệ thống và / hoặc DDE dựa trên nó, khi họ lần đầu tiên thiết kế OLE, vào thời của Windows 3; một hạn chế có thể hoặc không thể áp dụng ngày hôm nay.
Synetech

1
Vâng, nó thật kỳ quặc, đặc biệt là trên một máy ảo có không gian hạn chế. Sử dụng "giải nén để" giải nén kho lưu trữ RAR 8GB với hơn 6000 tệp trong khoảng 1 phút. Tuy nhiên, nếu bạn kéo các thư mục ra, sẽ mất cùng thời gian để giải nén vào thư mục tạm thời, nhưng ngoài ra, nó đóng băng cửa sổ đích và sau đó SAO CHÉP các tệp trong hơn 15 phút chỉ với 3mb / s. Nó đặc biệt chậm sao chép một tệp trên cùng một ổ đĩa (có thể do hệ thống tệp ảo bên dưới), mặc dù tôi có thể sao chép tệp từ một máy ảo khác vào máy này qua mạng với tốc độ hàng trăm MB / s.
Triynko

1
Tôi đoán một công việc tiềm năng xung quanh sẽ là tạo một tệp 0 byte với tên GUID tức là không thể thực hiện được dưới dạng tên tệp trùng lặp. Sau đó theo dõi các tệp của explorer.exe để xem nơi nó sao chép tệp. Cuối cùng trích xuất kho lưu trữ đến đích.
Zv_oDĐ

1

Nó được thực hiện để các yêu cầu bộ nhớ cho giải nén được giữ ở mức tối thiểu.

Nếu họ không sử dụng hệ thống tập tin, giải nén sẽ xảy ra trong bộ nhớ. Trong điều kiện bộ nhớ thấp, hoặc đối với các tệp nén lớn, điều này sớm muộn sẽ làm cạn kiệt bộ nhớ khả dụng và bắt đầu quá trình phân trang bộ nhớ.

Việc phân trang trong các trường hợp này sẽ chậm hơn rất nhiều so với việc chỉ sử dụng hệ thống tệp vì tệp vẫn đang được giải nén (và các tệp trang tiếp tục được thêm vào), nhưng cũng vì tệp đang được giải nén, nó đang được kiểm tra lỗi và như vậy rất nhiều hoạt động đọc / ghi. Điều tồi tệ nhất có thể xảy ra với một tập tin trang.

EDIT: Liên quan đến việc sử dụng một thư mục tạm thời, điều này là để tuân theo nhiều hướng dẫn của hệ điều hành. Nếu giải nén thất bại, không có gì đảm bảo chương trình thực hiện thao tác sẽ tự dọn sạch. Nó có thể đã bị hỏng chẳng hạn. Như vậy, không còn tệp nào còn lại trong thư mục đích của bạn và hệ điều hành sẽ loại bỏ tệp tạm thời khi thấy phù hợp.


3
Mặc dù đúng, điều đó không giải thích tại sao các tệp được nén vào một thư mục tạm thời trước rồi sau đó được chuyển đến đích. Các hoạt động cũng có thể được diễn ra ngay tại đó.
slhck

3
Đã chỉnh sửa để phản ánh tốt hơn câu hỏi của bạn
Một người lùn

4
@Dante, điều đó không đúng. Di chuyển một tệp trên cùng một phân vùng chỉ đơn giản là thay đổi chỉ mục của tệp trong hệ thống tệp sang thư mục mới, nó không sao chép bất kỳ dữ liệu nào và chỉ mất một tức thì. Đừng tin tôi? Hãy thử nó, cắt một tệp nhiều GB từ một thư mục và dán nó vào một thư mục khác; phải mất ít hơn một giây. Họ thử điều tương tự với ổ đĩa hoặc phân vùng khác. Mất vài phút.
Dour High Arch

3
"Hệ điều hành sẽ loại bỏ tệp tạm thời khi thấy phù hợp": Windows có bao giờ làm điều đó không?
grawity

1
Câu trả lời hoàn toàn sai này nên được loại bỏ. 7zip chỉ giải nén vào thư mục tạm thời trong các hoạt động kéo và thả và điều này là do các hạn chế của Windows. Xem superuser.com/questions/197961/ trên để biết thêm thông tin.
dss539

-1

Lý do đơn giản hơn bạn nghĩ: Nhiều chương trình giải nén tệp thành% temp%, là hệ thống tệp đích có thể không có đủ dung lượng.

Bây giờ, bạn có thể biết rằng hệ thống tệp của bạn có thể có đủ dung lượng, tuy nhiên ứng dụng thì không. Điều gì xảy ra nếu hệ thống tập tin đó được sử dụng bởi HĐH hoặc ứng dụng khác và bị lấp đầy trong khi giải nén?

Các nhà phát triển đưa ra giả định rằng% temp% có không gian "không giới hạn", trong khi đích đến của bạn thì không.


Không hẳn; Đó không phải là một lý do để sử dụng thư mục tạm thời. Ứng dụng này (hoặc ít nhất có thể) biết liệu có đủ không gian hay không. Đầu tiên, người lưu trữ biết chính xác các tệp nén lớn như thế nào khi chúng được giải nén và có thể phân bổ chúng trước, sau đó điền chúng vào khi nó giải nén, và thứ hai, khá đơn giản để truy vấn không gian trống trên ổ đĩa. Bên cạnh đó, nếu không có đủ không gian, thì nó chỉ giải nén trong khi có thể, sau đó sẽ xuất hiện lỗi khi hết dung lượng.
Synetech

Trên thực tế, đây là câu trả lời. Chỉ vì một ứng dụng có thể phân bổ không gian trên đích đến, không có nghĩa là nó sẽ có quyền truy cập độc quyền vào nó. Ứng dụng có thể truy vấn đích và xem nó có đủ dung lượng không, nhưng trong khi truy vấn đó đang diễn ra, trước khi có thể phân bổ không gian, ứng dụng khác có thể chiếm một phần không gian đó.
Keltari

Trên hết, một không gian tạm thời của người dùng được gắn với người dùng đó ở cấp hệ thống tệp. Nếu có sự cố hoặc lỗi khác, người dùng khác không thể xem tệp tạm thời. Đích có thể không có các hạn chế bảo mật như vậy, vì vậy an toàn hơn khi không có dữ liệu nhạy cảm có thể bị treo trên hệ thống tệp khác.
Keltari

Như tôi đã nói, nếu nó hết trong khi giải nén, nó chỉ đơn giản là đưa ra một thông báo lỗi. Làm thế nào để giải nén vào một ổ đĩa tạm thời sửa chữa nó? Nếu không có đủ dung lượng, thì sẽ không có đủ dung lượng sau khi các tệp được trích xuất vào ổ đĩa tạm thời và nó sẽ lãng phí tất cả các chu kỳ CPU đó và ổ đĩa đọc / ghi trích xuất vào ổ đĩa tạm thời không có gì. Giống như tôi đã nói trong câu trả lời của mình, vui lòng kiểm tra mã nguồn cho 7-Zip hoặc liên hệ với Alexander Roshal để hỏi anh ta về WinRAR. Ngoài ra, như tôi cũng đã nói, nếu bạn chỉ định mục tiêu hoặc sử dụng menu ngữ cảnh, nó không sử dụng% temp%.
Synetech

-2

Không phải là nhà phát triển 7-zip hay WinRAR, nhận xét của tôi ở đây hoàn toàn là suy đoán. Điều đó đang được nói, sử dụng không gian tạm thời để giải nén cho đến khi mọi thứ hoàn tất giúp xác minh rằng tất cả các tệp còn nguyên vẹn (nghĩa là zip không bị hỏng).

Không có gì tệ hơn là giải nén một tệp nén lớn, đã bắt đầu làm việc với các tệp khi bắt đầu lưu trữ; chỉ để tìm ra rằng một cái gì đó bị hỏng ở cuối kho lưu trữ. Lúc đó bạn mất niềm tin vào mọi thứ.

Nhận xét cuối cùng của tôi là tôi không nhớ đã thấy hành vi này từ 7-zip. Khi tôi nhấp chuột phải và nói giải nén ở đây, tôi thường có quyền truy cập vào các tệp khi chúng đang được giải nén. Bạn đã kiểm tra kỹ xem đó có phải là một thiết lập ở đâu đó không?


Đoạn thứ 3: Tôi không thể tìm thấy các cài đặt như vậy và đó là một loạt các tệp lớn (4G) tôi vừa giải nén, tôi chắc chắn rằng tất cả 4G đã được di chuyển chậm.

Đoạn 2: trích xuất thành "temp" không ngăn chặn bất cứ điều gì nếu tệp nén đã bị hỏng.

Nó ngăn bạn nhìn thấy các tập tin trong một zip bị hỏng. Logic là bạn không được nhìn thấy bất cứ điều gì cho đến khi mọi thứ được xác minh. Theo như thiết lập, tôi không biết phải nói gì với bạn. Nếu tôi bảo 7-zip trích xuất một tệp tar lớn vào Màn hình của mình, tôi bắt đầu thấy các tệp ngay lập tức. Nó có thể là do tar không phải là một định dạng nén.
Kirk

> Logic là bạn không được nhìn thấy bất cứ điều gì cho đến khi mọi thứ được xác minh. Đó là vô lý. Làm thế nào sau đó bạn sẽ phục hồi một số tập tin từ một kho lưu trữ bị hỏng? Lý do bạn không gặp phải là vì bạn đã sử dụng tiện ích mở rộng shell thay vì kéo các tệp từ GUI.
Synetech
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.