ทำไม 7-zip / WinRAR ทำการคลายซิปไฟล์ไปที่“ temp” ก่อนที่จะย้ายไปยังปลายทาง?


50

ทำไม 7-zip / WinRAR ทำการคลายซิปไฟล์ไปที่ "temp" ก่อนที่จะย้ายไปยังปลายทาง?

ฉันไม่เห็นความได้เปรียบใด ๆ กับการขยายไฟล์ไปยังปลายทางโดยตรง มันน่ารำคาญจริงๆโดยเฉพาะไฟล์ขนาดใหญ่ (เหมือนตอนนี้!)


แก้ไข:

กรุณาอธิบายว่าทำไมพวกเขาไม่ได้ทำในสถานที่


3
หากคุณระบุ `` เป็นโฟลเดอร์ชั่วคราวใน WinRAR มันควรจะแยกโดยตรงไปยังปลายทาง

คำตอบ:


82

คุณจะแยกไฟล์อย่างไร? คุณกำลังใช้ command-line หรือ GUI อยู่หรือไม่? คุณลากไฟล์หรือเลือกไฟล์และใช้ฟังก์ชั่นแตกไฟล์หรือไม่? คุณใช้เมนูบริบทของส่วนขยายของเชลล์หรือไม่?

หากคุณป้อนโฟลเดอร์ปลายทางจากนั้นเลือกฟังก์ชั่นการแยกหรือใช้ส่วนขยายของเชลล์พวกเขาจะไม่แยกไปที่โฟลเดอร์ชั่วคราวก่อนพวกเขาจะแยกโดยตรงไปยังปลายทาง

หากคุณเลือกไฟล์ใน UI และลากไปยังโฟลเดอร์เป้าหมายไฟล์นั้นจะแตกไปยังโฟลเดอร์ชั่วคราว

เหตุผลอยู่ที่การเลือกปลายทาง หากคุณเข้าสู่โฟลเดอร์เป้าหมายหรือใช้รายการเมนูตามบริบทโปรแกรมจะทราบได้อย่างชัดเจนว่าจะต้องแตกไฟล์ที่ใด อย่างไรก็ตามถ้าคุณเพียงแค่ลากไฟล์ดังนั้นเนื่องจากฟังก์ชันการลากและวางของOLEทำงานอย่างไรโปรแกรมจะไม่ทราบว่าโฟลเดอร์เป้าหมายอยู่ที่ใด กล่าวอีกนัยหนึ่งคือExplorerที่ได้รับโฟลเดอร์เป้าหมายไม่ใช่โปรแกรมเก็บถาวร ด้วยเหตุนี้โปรแกรมจึงไม่สามารถทราบได้ว่าจะดึงข้อมูลเหล่านั้นไว้ที่ใดและแยกไฟล์เหล่านั้นไปยังโฟลเดอร์ชั่วคราวแล้ว Explorer จะย้ายพวกเขาเมื่อเสร็จสิ้น คุณสามารถดูได้อย่างชัดเจนโดยแยกไฟล์ขนาดใหญ่โดยใช้ทั้งสองวิธี เมื่อคุณลากมันออกไปยังโฟลเดอร์มันจะแตกออกมาจากนั้นคุณจะเห็นกล่องโต้ตอบการทำงานของไฟล์มาตรฐานของ Explorer ที่ย้ายไปยังโฟลเดอร์ หากคุณระบุโฟลเดอร์และคลิกแตกไฟล์จะแตกออกและไม่มีการดำเนินการใด ๆ เพิ่มเติม

อย่าลังเลที่จะอ่านซอร์สโค้ดสำหรับ 7-Zipเพื่อดูวิธีจัดการตำแหน่งการแตกไฟล์


ฉันเรียนรู้วิธีนี้ยากเมื่อหลายปีก่อนเมื่อฉันต้องการใช้การลากแล้วปล่อยในโปรแกรมที่ฉันเขียน


7
ยอดเยี่ยมอย่างแน่นอน - ขอบคุณสำหรับสิ่งนี้! แต่ฉันไม่เคยใช้เวลาในการติดตาม "อะไร" และทำไม "เวลาแปลก ๆ ที่ฉันพบ C: โฟลเดอร์ชั่วคราวที่เต็มไปด้วยเสียงหวีดหวิวฉันเดินผ่านตัวเลือกของ Winrar เพื่อค้นหาว่ามันอยู่ที่ไหน จะต้องตั้งค่าให้แยกก่อนไปยังโฟลเดอร์ temp ใน C: แต่อนิจจาฉันไม่พบฉันไม่เคยเชื่อมโยงความสัมพันธ์ระหว่างสองวิธีและตอนนี้ขอบคุณที่เห็นแสง :) ขอบคุณ!
Coldblackice

2
มีข้อผิดพลาดเกิดขึ้นที่นี่คือ Explorer ไม่ย้ายไฟล์ แต่คัดลอกไฟล์ ซึ่งน่ารำคาญจริง ๆเพราะการย้ายนั้นเร็วมาก (ยกเว้นเมื่อย้ายจากพาร์ติชั่นไปยังพาร์ติชั่น) และควรเป็นตัวเลือกที่ดีที่สุด (ไม่เปลืองเนื้อที่) แต่คนโง่ที่ Microsoft คิดว่าเป็นความคิดที่ดีที่จะคัดลอกจากโฟลเดอร์ชั่วคราว จากนั้นเพียงปล่อยให้ข้อมูลโฟลเดอร์ชั่วคราววางอยู่รอบ ๆ ไม่เพียง แต่การแยกไฟล์เก็บถาวรขนาดใหญ่ที่จะเพิ่มพื้นที่เป็นสองเท่า แต่ยังใช้เวลานานเป็นสองเท่า!
ADTC

พวกเขาอาจมีเหตุผลที่ดีและอาจเป็นเพราะข้อ จำกัด บางประการของระบบและ / หรือ DDE ที่เป็นพื้นฐานเมื่อพวกเขาออกแบบ OLE ครั้งแรกกลับมาในยุคของ Windows 3; ข้อ จำกัด ที่อาจมีหรือไม่มีผลบังคับใช้ในวันนี้
Synetech

1
ใช่มันเป็นเรื่องไร้สาระโดยเฉพาะอย่างยิ่งในเครื่องเสมือนที่มีพื้นที่ จำกัด การใช้ "แตกไฟล์" เพื่อคลายซิปไฟล์เก็บถาวร 8GB RAR ด้วยไฟล์มากกว่า 6,000 ไฟล์ในเวลาประมาณ 1 นาที อย่างไรก็ตามหากคุณลากโฟลเดอร์ออกมันจะใช้เวลานานเท่ากันในการแตกไฟล์ไปยังไดเร็กตอรี่ temp แต่นอกจากนี้มันจะหยุดการทำงานของหน้าต่างเป้าหมายแล้วคัดลอกไฟล์นานกว่า 15 นาทีที่ 3mb / s เท่านั้น โดยเฉพาะอย่างยิ่งการคัดลอกไฟล์บนไดรฟ์เดียวกันช้า (อาจเป็นเพราะระบบไฟล์เสมือน) แม้ว่าฉันสามารถคัดลอกไฟล์จากเครื่องเสมือนอื่นไปยังเครื่องนี้ผ่านเครือข่ายได้หลายร้อย MB / s
Triynko

1
ฉันเดาว่าการทำงานที่อาจเกิดขึ้นคือการสร้างไฟล์ 0 ไบต์ที่มีชื่อ GUID นั่นคือไม่น่าจะเป็นจริงที่จะเกิดขึ้นเป็นชื่อไฟล์ที่ซ้ำกัน จากนั้นมอนิเตอร์ไฟล์ของ explorer.exe จัดการเพื่อดูตำแหน่งที่คัดลอกไฟล์ ในที่สุดก็แยกเก็บถาวรไปยังปลายทาง
Zv_oDD

1

มันทำเพื่อความต้องการหน่วยความจำสำหรับการบีบอัดจะถูกเก็บไว้ให้น้อยที่สุด

หากพวกเขาไม่ได้ใช้ระบบไฟล์การบีบอัดจะเกิดขึ้นในหน่วยความจำ ภายใต้เงื่อนไขหน่วยความจำเหลือน้อยหรือสำหรับไฟล์บีบอัดขนาดใหญ่จะทำให้หน่วยความจำที่มีอยู่หมดในไม่ช้าก็เร็วและเริ่มกระบวนการเพจจิ้งหน่วยความจำ

การเพจภายใต้สถานการณ์เหล่านี้จะช้ากว่าการใช้ระบบไฟล์อย่างมากเพราะไฟล์ยังคงถูกคลายบีบอัด (และไฟล์หน้ายังคงถูกเพิ่ม) แต่เนื่องจากในขณะที่ไฟล์กำลังถูกแตกไฟล์จะถูกตรวจสอบข้อผิดพลาดและมีเช่น การดำเนินการอ่าน / เขียนจำนวนมาก สิ่งที่แย่ที่สุดที่อาจเกิดขึ้นกับไฟล์เพจ

แก้ไข: เกี่ยวกับการใช้ไดเรกทอรีชั่วคราวนี่คือเพื่อปฏิบัติตามแนวทางระบบปฏิบัติการมากมาย หากการคลายการบีบอัดล้มเหลวจะไม่มีการรับประกันว่าโปรแกรมที่ใช้ในการดำเนินการจะทำความสะอาดตัวมันเอง มันอาจจะล้มเหลวเช่น ดังนั้นจะไม่มีไฟล์ที่เหลืออยู่ในไดเรกทอรีเป้าหมายของคุณและระบบปฏิบัติการจะกำจัดไฟล์ชั่วคราวเมื่อเห็นว่าเหมาะสม


3
ในขณะที่เป็นจริงนั้นไม่ได้อธิบายว่าทำไมไฟล์ถูกบีบอัดไปยังไดเรกทอรีชั่วคราวก่อนแล้วจึงย้ายไปยังปลายทาง การดำเนินการอาจเกิดขึ้นที่นั่น
slhck

3
แก้ไขเพื่อให้สะท้อนคำถามของคุณดีขึ้น
คนแคระ

4
@Dante ที่ไม่เป็นความจริง การย้ายไฟล์บนพาร์ติชั่นเดียวกันเพียงแค่เปลี่ยนดัชนีของไฟล์ในระบบไฟล์ไปยังไดเรคทอรีใหม่มันไม่ได้คัดลอกข้อมูลใด ๆ และใช้เวลาเพียงครู่เดียว ไม่เชื่อฉัน ลองตัดไฟล์หลาย GB จากโฟลเดอร์หนึ่งแล้ววางลงในโฟลเดอร์อื่น ใช้เวลาน้อยกว่าหนึ่งวินาที พวกเขาลองสิ่งเดียวกันกับไดรฟ์หรือพาร์ติชันอื่น ใช้เวลาไม่กี่นาที
Dour High Arch

3
เรื่อง "ระบบปฏิบัติการจะกำจัดไฟล์ชั่วคราวเมื่อเห็นว่าเหมาะสม": Windows เคยทำเช่นนั้นหรือไม่?
grawity

1
คำตอบที่ผิดทั้งหมดนี้ควรถูกลบออก 7zip แตกการบีบอัดไปยังโฟลเดอร์ชั่วคราวระหว่างการลากและวางเท่านั้นเนื่องจากข้อ จำกัด ของ Windows ดูsuperuser.com/questions/197961/…สำหรับข้อมูลเพิ่มเติม
dss539

-1

เหตุผลง่ายกว่าที่คุณคิด: หลาย ๆ โปรแกรมแกะไฟล์ไปยัง% temp% นั่นคือระบบไฟล์ปลายทางอาจมีพื้นที่ไม่เพียงพอ

ตอนนี้คุณอาจรู้ว่าระบบไฟล์ของคุณอาจมีพื้นที่ว่างเพียงพออย่างไรก็ตามแอปพลิเคชันไม่มี จะเกิดอะไรขึ้นถ้าระบบไฟล์นั้นใช้งานอยู่โดยระบบปฏิบัติการหรือแอปพลิเคชั่นอื่นและถูกเติมเต็มในขณะที่คลายการบีบอัด?

นักพัฒนาสร้างสมมติฐานว่า% temp% มีพื้นที่ "ไม่ จำกัด " ในขณะที่ปลายทางของคุณไม่มี


ไม่มาก นั่นไม่ใช่เหตุผลที่จะใช้ไดเรกทอรีชั่วคราว แอปพลิเคชั่นนั้น (หรืออย่างน้อยสามารถ) รู้ว่ามีที่ว่างเพียงพอหรือไม่ อย่างแรกผู้จัดเก็บรู้ว่าไฟล์ที่ถูกบีบอัดมีขนาดใหญ่เพียงใดเมื่อพวกมันถูกแตกไฟล์และสามารถจัดสรรได้ก่อนแล้วจึงเติมเข้าไปในขณะที่คลายการบีบอัดและที่สองมันค่อนข้างง่ายในการค้นหาพื้นที่ว่างบนไดรฟ์ นอกจากนี้หากมีพื้นที่ไม่เพียงพอก็เพียงแค่ขยายในขณะที่สามารถทำได้จากนั้นจะโยนข้อผิดพลาดเมื่อพื้นที่ไม่เพียงพอ
Synetech

จริงๆแล้วนี่เป็นคำตอบที่ค่อนข้าง เพียงเพราะแอปพลิเคชันสามารถจัดสรรพื้นที่บนปลายทางปลายทางล่วงหน้าไม่ได้หมายความว่ามันจะมีการเข้าถึงแบบพิเศษ แอปพลิเคชันสามารถสอบถามปลายทางและดูว่ามีพื้นที่เพียงพอหรือไม่ แต่ในขณะที่มีการสอบถามเกิดขึ้นก่อนที่จะสามารถจัดสรรพื้นที่ได้แอปพลิเคชันอื่นสามารถใช้พื้นที่บางส่วนนั้นได้
Keltari

ยิ่งไปกว่านั้นพื้นที่ temp ของผู้ใช้จะเชื่อมโยงกับผู้ใช้ในระดับระบบไฟล์ หากมีข้อผิดพลาดหรือความล้มเหลวอื่นผู้ใช้รายอื่นไม่สามารถดูไฟล์ชั่วคราว ปลายทางอาจไม่มีข้อ จำกัด ด้านความปลอดภัยดังกล่าวดังนั้นจึงปลอดภัยกว่าที่จะไม่มีข้อมูลที่ละเอียดอ่อนแขวนอยู่ในระบบไฟล์อื่น
Keltari

อย่างที่ฉันพูดถ้ามันหมดในขณะที่คลายมันก็แค่ให้ข้อความแสดงข้อผิดพลาด การแตกไฟล์ลงในไดรฟ์ชั่วคราวจะแก้ไขได้อย่างไร หากมีพื้นที่ไม่เพียงพอก็จะมีพื้นที่ไม่เพียงพอหลังจากที่ไฟล์ถูกแยกไปยังไดรฟ์ชั่วคราวและมันจะสูญเสียรอบ CPU เหล่านั้นทั้งหมดและไดรฟ์อ่าน / เขียนเพื่อแยกไฟล์ชั่วคราว อย่างที่ฉันพูดในคำตอบของฉันรู้สึกฟรีเพื่ออ่านซอร์สโค้ดสำหรับ 7-Zip หรือติดต่อ Alexander Roshalเพื่อถามเขาเกี่ยวกับ WinRAR นอกจากนี้อย่างที่ฉันบอกถ้าคุณระบุเป้าหมายหรือใช้เมนูบริบทมันจะไม่ใช้% temp%
Synetech

-2

ไม่ใช่นักพัฒนา 7-zip หรือ WinRAR ความคิดเห็นของฉันที่นี่เป็นการเก็งกำไรล้วนๆ ที่กล่าวว่าการใช้พื้นที่ชั่วคราวเพื่อคลายออกจนทุกอย่างสมบูรณ์ช่วยในการตรวจสอบว่าไฟล์ทั้งหมดยังคงอยู่ (เช่นซิปไม่เสียหาย)

ไม่มีอะไรเลวร้ายยิ่งไปกว่าการคลายไฟล์บีบอัดขนาดใหญ่ออกมาหลังจากที่เริ่มทำงานกับไฟล์ที่จุดเริ่มต้นของไฟล์เก็บถาวร เท่านั้นที่จะพบว่ามีบางสิ่งที่เสียหายในตอนท้ายของที่เก็บถาวร ณ จุดนี้คุณสูญเสียความมั่นใจในทุกสิ่ง

ความคิดเห็นสุดท้ายของฉันคือฉันจำไม่ได้ว่าเห็นพฤติกรรมนี้จาก 7-zip เมื่อฉันคลิกขวาและพูดว่าแยกที่นี่ฉันมักจะสามารถเข้าถึงไฟล์ตามที่พวกเขาจะถูกแตกไฟล์ คุณได้ตรวจสอบอีกครั้งว่าไม่ได้ตั้งค่าไว้ที่อื่นหรือไม่?


ย่อหน้าที่ 3: ฉันไม่พบการตั้งค่าเช่นนี้และมันเป็นไฟล์จำนวนมาก (4G) ที่ฉันแยกออกมาตอนนี้ฉันค่อนข้างมั่นใจว่า 4G ทั้งหมดจะถูกย้ายอย่างช้า ๆ ในที่สุด

ย่อหน้าที่สอง: แยกไปที่ "temp" ไม่ได้ป้องกันอะไรเลยหากไฟล์ซิปเสียหายแล้ว

มันป้องกันไม่ให้คุณเห็นไฟล์ที่อยู่ใน zip ที่เสียหาย ตรรกะคือคุณจะไม่เห็นอะไรเลยจนกว่าทุกอย่างจะได้รับการยืนยัน เท่าที่การตั้งค่าไปฉันไม่แน่ใจว่าจะบอกคุณ ถ้าฉันบอกให้ 7-zip แตกไฟล์ tar ขนาดใหญ่ไปยังเดสก์ท็อปของฉันฉันจะเริ่มเห็นไฟล์ทันที อาจเป็นเพราะ tar ไม่ใช่รูปแบบการบีบอัด
Kirk

> เหตุผลคือคุณจะไม่เห็นอะไรเลยจนกระทั่งทุกอย่างได้รับการยืนยัน นั่นไร้สาระ คุณจะกู้คืนไฟล์บางไฟล์จากไฟล์เก็บถาวรที่เสียหายได้อย่างไร เหตุผลที่คุณไม่พบมันเป็นเพราะคุณใช้ส่วนขยายของเชลล์แทนการลากไฟล์จาก GUI
Synetech
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.