2008-10-28 25 views
8

Tôi đang làm việc với một hệ thống tệp FAT16 nhỏ và tôi muốn tạo các giá trị CRC cho các tệp XML đơn lẻ lưu trữ thông tin cấu hình. Trong trường hợp dữ liệu thay đổi hoặc bị hỏng, tôi muốn có thể kiểm tra CRC để xác định rằng tệp vẫn ở trạng thái ban đầu.CRC kiểm tra các tệp

Câu hỏi đặt ra là, làm cách nào để đặt giá trị CRC vào tệp, mà không thay đổi giá trị CRC của tệp? Tôi có thể nghĩ về một vài giải pháp, nhưng tôi nghĩ rằng phải có một giải pháp khá chuẩn cho vấn đề này.

Trả lời

8

Bạn có thể nối thêm giá trị CRC vào cuối tệp. Sau đó, khi tính toán giá trị CRC sau này để kiểm tra, hãy bỏ qua bốn byte cuối cùng.

5

Xác định tiêu đề, tạo CRC của mọi thứ ngoại trừ tiêu đề, sau đó đặt giá trị vào tiêu đề.

0

Không có cách nào để thực hiện việc này. Bạn có thể tạo x byte đầu tiên (CRC sử dụng số nguyên 32 bit, vì vậy 4 byte) của tệp chứa CRC và sau đó khi tính CRC, bạn chỉ có thể xem xét các byte sau 4 byte ban đầu đó.

Một giải pháp khác là đưa CRC vào tên tệp. Vì vậy, MyFile.Config sẽ kết thúc được MyFile.CRC1234567.Config.

1

Một giải pháp là sử dụng dsofile.dll để thêm thuộc tính mở rộng vào tệp của bạn. Bạn có thể lưu giá trị CRC (được chuyển thành chuỗi) thành thuộc tính tệp mở rộng. Bằng cách đó bạn không thay đổi cấu trúc của tập tin.

dsofile.dll là một dll ActiveX để nó có thể được gọi từ các ngôn ngữ khác nhau, tuy nhiên nó hạn chế bạn chạy trên Windows. Dưới đây là thông tin thêm về dsofile.dll: http://support.microsoft.com/kb/224351

+0

Tôi tin rằng dsofile.dll chỉ hoạt động với các tệp 'Cấu trúc lưu trữ'. –

4

Một giải pháp phổ biến là chỉ sử dụng các tệp khác nhau. Bên cạnh mỗi tệp chỉ đơn giản có một tệp có cùng tên tệp với phần mở rộng khác. Ví dụ: foobar.txt và foobar.txt.md5 (hoặc .crc).

1

Tôi sẽ không lưu trữ CRC trong chính tệp đó. Tôi sẽ có một tệp duy nhất (tôi sẽ sử dụng định dạng XML) mà chương trình của bạn sử dụng, với danh sách tên tệp và giá trị CRC được liên kết của chúng. Không cần phải làm cho nó phức tạp.

4

Giải pháp chung được sử dụng rộng rãi trong giao thức truyền thông là đặt trường CRC thành 0, tính CRC và sau đó đặt nó thay vì 0. Mã kiểm tra phải thực hiện quy trình ngược - đọc CRC, bằng 0 lĩnh vực, tính toán CRC và so sánh.

Ngoài ra, để kiểm tra tệp, tôi khuyên bạn nên sử dụng MD5 thay vì CRC.

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