2012-04-08 26 views
7

Tôi đang viết một chương trình C++ để đọc/ghi một tệp lớn (có thể lớn hơn 60GB). Bởi googling vấn đề, có vẻ như là có một giới hạn 2GB trên tập tin io trong hệ thống 32 bit (Tôi đang sử dụng Windows 7 64bit nhưng chương trình của tôi đã được biên soạn với mingw32). Trong chương trình của tôi, tôi viết 10 số nguyên tại một thời điểm vào tệp và tất cả các số này được tạo ngẫu nhiên dựa trên một số thuật toán. Dường như chương trình có thể chạy ngay cả khi kích thước tệp lớn hơn 40GB nhưng không có cách nào để tôi kiểm tra xem dữ liệu được đọc bởi chương trình có thực sự là dữ liệu được lưu trữ trong tệp hoặc một số số rác không. Tuy nhiên, chương trình không báo cáo bất kỳ cảnh báo hoặc lỗi nào. Điều này thực sự có thể đọc/ghi tập tin lớn hơn 60GB trong một chương trình 32-bit?có giới hạn 2G đối với việc đọc/ghi tệp bằng C++ fstream không?

+0

Bản sao có thể có của http://stackoverflow.com/questions/301995/write-large-file –

+0

Tôi nghĩ liên kết được đưa ra bởi Carey Gregory trả lời câu hỏi giới hạn tệp 2GByte. Tại sao không có cách nào để bạn kiểm tra xem các con số có được viết chính xác không? Thay vì viết số ngẫu nhiên, bạn có thể kiểm tra bằng cách viết chuỗi số 0 đến 2.147.483.647 (tất cả các số nguyên 32 bit dương), sẽ là tệp 8GB, sau đó đọc lại. – gbulmer

Trả lời

1

Có giới hạn về kích thước tệp (tối đa 4GB, tôi nghĩ) trên hệ thống tệp Fat32. Windows 7 chắc chắn không nên sử dụng hệ thống tập tin đó theo mặc định.

Cũng trên hệ thống 32 bit có giới hạn về kích thước tệp bạn có thể ánh xạ vào bộ nhớ cùng một lúc bằng cách sử dụng CreateFileMapping/MapViewOfFile. Tuy nhiên, fstream không sử dụng CreateFileMapping/MapViewOfFile trong nội bộ, do đó không có giới hạn cho kích thước tệp (ngoài giới hạn hệ thống tệp). Và ngay cả với CreateFileMapping, bạn có thể ánh xạ phần của tập tin lớn hơn vào bộ nhớ, do đó không có giới hạn nào ngoài việc áp đặt bởi hệ thống tập tin.

+0

oh, nếu fstream không thực sự có giới hạn về kích thước tập tin hơn nó sẽ là một tin tuyệt vời cho tôi vì tôi không có ý tưởng làm thế nào để phá vỡ tập tin của tôi thành từng mảnh để tránh giới hạn 4GB. Cảm ơn – user1285419

+1

"Windows 7 chắc chắn không nên sử dụng hệ thống tập tin đó theo mặc định." - Tuyên bố đó quá rộng. Tuy nhiên, vì câu hỏi liên quan đến một tập tin 40GB hoặc 60GB, nó có lẽ không phải trên bộ nhớ flash USB. –

+0

@Windowsprogrammer: exFAT – SigTerm

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