บางครั้งเราได้รับรายงานไฟล์ที่เสียหายจากลูกค้า สิ่งเหล่านี้หายากและเป็นไปไม่ได้ที่จะทำซ้ำ เมื่อเราเข้าสู่เครื่องของลูกค้าจากระยะไกลเราจะพบว่าไฟล์ (โดยปกติจะเป็นไฟล์ INI) ไม่สามารถเปิดได้ ไม่สามารถคัดลอกไฟล์ในเครื่องเพื่อการวิเคราะห์ ตามตัวอย่างที่ จำกัด ไฟล์ที่เสียหายเหล่านี้มีขนาด "0kB" และสามารถลบได้เท่านั้น เมื่อสิ่งนี้เกิดขึ้นจะมีผลกับไฟล์ INI เพียงไฟล์เดียวจากหลายสิบไฟล์ ระบบที่เหลือก็ใช้ได้ เมื่อไฟล์ที่เสียหายถูกสร้างขึ้นใหม่ระบบจะกู้คืนทั้งหมด
เราไม่ทราบว่าสิ่งนี้เกิดขึ้นได้อย่างไรและต้องการทำซ้ำและหวังว่าจะแก้ปัญหาได้ อาจเป็นปัญหาของ Windows ข้อผิดพลาดในการเขียนโค้ดแม้แต่ปัญหาฮาร์ดแวร์ที่เกี่ยวข้องกับการปิดเครื่องโดยไม่คาดคิด สำหรับวัตถุประสงค์ในการทดสอบฉันได้สร้างไฟล์ TXT พร้อมกับขยะแบบสุ่มเช่นเดียวกับใน:
// Delphi code, but applies to any language
procedure TfrmDiagnostics.CreateCorruptFile();
var
fpDump: TextFile;
nChar: Integer;
begin
RandSeed := (GetTickCount() mod 23);
AssignFile(fpDump, 'C:\Corrupted.txt');
for nChar:=1 to 100 do
Write(fpDump, Chr(Random(250)));
Flush(fpDump);
CloseFile(fpDump);
end;
นี่สร้างไฟล์ที่ยุ่งเหยิงอย่างมากไบต์สองสามตัวแรกคือ: NREâA # »ขอบคุณ… ilL (‘- ØÏD YL & amp; d .... แต่ไฟล์ยังคงเปิดใน Notepad ++ และบรรณาธิการ ASCII อื่น ๆ อีกสองสามตัวที่ฉันพยายาม
เป็นไปได้หรือไม่ที่จะสร้างไฟล์ "เสียหาย" อย่างแท้จริงใน Windows ไฟล์ที่ Windows ปฏิเสธที่จะเปิด อาจเกี่ยวข้องกับการเล่นซอกับตารางการจัดสรรไฟล์ แต่ฉันสงสัยว่าผู้ใช้มีการเข้าถึง FAT