ไฟล์บีบอัด (Compressed files) ใช้กันอย่างแพร่หลายในปัจจุบัน ด้วยขนาดไฟล์ที่ใหญ่ขึ้นเรื่อยๆ การบีบอัดจึงเป็นที่นิยมมากขึ้น ขณะพยายามแตกไฟล์บีบอัด ผู้ใช้บางคนเจอข้อความผิดพลาด 「End-of-central-directory signature not found」 ข้อผิดพลาดนี้ขึ้นเมื่อพยายามแตกไฟล์ด้วยโปรแกรม unzip คำอธิบายรายละเอียดมาพร้อมกับข้อความดังกล่าว
สาเหตุของข้อผิดพลาดนี้ค่อนข้างชัดเจน และระบุอยู่ในข้อความผิดพลาดแล้ว คือ ไฟล์ที่ดาวน์โหลดมา ไม่สมบูรณ์ (incomplete) หรือเกิดข้อผิดพลาดระหว่างดาวน์โหลด แต่ไม่ใช่สาเหตุเดียว เราจะวิเคราะห์สาเหตุต่างๆ อย่างละเอียดด้านล่าง ข้อผิดพลาดนี้แก้ไขได้ง่าย จึงไม่ต้องกังวล มาเริ่มกันเลย
- ไฟล์เสียหาย (Corrupted File) — สาเหตุหลักคือ พยายามแตกไฟล์ที่เสียหาย อาจเกิดจากดาวน์โหลดไม่เสร็จ ทำให้ไฟล์เสียหาย ในกรณีนี้ วิธีปลอดภัยคือ ลบไฟล์ที่มีปัญหาและดาวน์โหลดใหม่
- ใช้โปรแกรมไม่ถูกต้อง (Incorrect Utility) — หากใช้ unzip กับไฟล์บีบอัดที่ไม่รองรับ เช่น .gz หรือ gunzip จะเจอข้อผิดพลาดนี้ ต้องใช้ gunzip utility ที่เหมาะสมแทน
- ไฟล์หลายส่วน (Multipart Archive) — ไฟล์ที่มีหลายส่วน (split archive) ต้องการทุกส่วนเพื่อแตกไฟล์ได้ถูกต้อง ต้องรวมไฟล์ก่อนจึงจะแตกได้
เข้าใจสาเหตุแล้ว มาดูวิธีแก้ไข
วิธีที่ 1: ใช้โปรแกรมแตกไฟล์ทางเลือก (Alternative Utilities)
โปรแกรม unzip ค้นหาบรรทัดโค้ดที่บ่งบอกถึงจุดสิ้นสุดของไฟล์บีบอัด หากไม่พบ จะโยนข้อผิดพลาดนี้ แต่มีโปรแกรมอื่นที่ไม่ค้นหาโค้ดสิ้นสุด จึงแตกไฟล์ได้ นี่คือวิธีใช้:
7zip
โปรแกรมฟรีแรกคือ 7zip วิธีใช้:
- ติดตั้งบนเครื่องก่อน
- Mac: ใช้ brew package manager ติดตั้ง:
brew install p7zip
- Ubuntu: ใช้คำสั่ง:
sudo apt install p7zip-full
- Windows: ดาวน์โหลดจากเว็บไซต์ทางการ
- ใช้คำสั่งแตกไฟล์:
7z x filename.zip
- ดูว่าแก้ปัญหาได้ไหม
Fastjar และ Ditto
อีกโปรแกรมหนึ่งคือ fastjar (พัฒนาจาก Java) สำหรับ Mac ใช้ ditto ที่มากับระบบ วิธีติดตั้งและใช้:
- Ubuntu: ติดตั้ง fastjar:
sudo apt install fastjar
- Windows: ดาวน์โหลดจาก SourceForge แล้วไปที่โฟลเดอร์ของโปรแกรม
- ใช้คำสั่งแตกไฟล์:
jar xvf filename.zip
- Mac: ใช้ ditto แทน:
ditto -xk YourZipfile.zip ./
./ หมายถึงไดเรกทอรีปัจจุบัน ไฟล์จะถูกแตกที่นี่
หมายเหตุสำคัญ:
บ่อยครั้งที่พยายามแตกไฟล์ .gz ด้วย unzip ซึ่งนำไปสู่ข้อผิดพลาดนี้ สำหรับไฟล์ .gz ต้องใช้ gunzip utility หรือ tar utility แทน (โดยเฉพาะ Ubuntu ที่ไฟล์บีบอัดมักเป็น .gz)
วิธีที่ 2: ดาวน์โหลดไฟล์ใหม่ (Download the File Again)
ข้อผิดพลาด 「end of central directory signature not found」 มักเกิดเมื่อไฟล์ดาวน์โหลดไม่สมบูรณ์ หรือเสียหายระหว่างดาวน์โหลด unzip จึงอ่านไฟล์ไม่ได้ และโยนข้อผิดพลาด วิธีแก้คือ ดาวน์โหลดไฟล์ที่มีปัญหาใหม่ทั้งหมด หากวิธีข้างต้นไม่ได้ผล เมื่อดาวน์โหลดใหม่ครบถ้วน ควรแตกไฟล์ได้ปกติ