2012-04-08 8 views
7

Büyük bir dosyayı okumak/yazmak için (muhtemelen 60 GB'tan büyük) bir C++ programı yazıyorum. Sorunu googling yaparak, 32 bit sistemde dosya üzerinde 2GB bir limit var gibi görünüyor (Windows 7 64bit kullanıyorum ama program mingw32 ile derlendi). Programımda, dosyaya bir kerede 10 tamsayı yazıyorum ve tüm bu rakamlar, bazı algoritmalara göre rasgele oluşturuluyor. Programın boyutu 40 GB'tan büyük olduğunda bile çalışabiliyor gibi görünüyor, ancak program tarafından okunan verilerin gerçekten dosyada saklanan bir dosya mı yoksa bazı gereksiz numaralar mı olduğunu kontrol etmenin bir yolu yok. Ama yine de, program herhangi bir uyarı veya hata bildirmiyor. Bu 32-bit bir programda 60GB daha büyük dosya okumak/yazmak mümkün mü?C++ fstream tarafından dosya okuma/yazma için 2G sınırı var mı?

+0

http://stackoverflow.com/questions/301995/write-large-file –

+0

Muhtemel kopyası Carey Gregory tarafından verilen bağlantının 2GByte dosya sınırı sorusunu yanıtladığını düşünüyorum. Numaraların doğru yazıldığını kontrol etmenin bir yolu yok mu? Rasgele sayılar yazmak yerine, 8GB'lık bir dosya olacak olan 0 ile 2,147,483,647 (tüm pozitif 32 bit tam sayı) sayılarının sırasını yazarak sınayabilirsiniz. – gbulmer

cevap

1

Fat32 dosya sisteminde dosya boyutu sınırı (4GB max, sanırım) var. Windows 7 kesinlikle bu dosya sistemini varsayılan olarak kullanmamalı.

Ayrıca 32bit sistemde, dosya boyutunda CreateFileMapping/MapViewOfFile kullanarak bir kerede eşleştirebileceğiniz bir sınır vardır. Ancak, fstream, CreateFileMapping/MapViewOfFile öğesini dahili olarak kullanmaz, bu nedenle dosya boyutu için bir sınır yoktur (dosya sistemi sınırlarının yanı sıra). CreateFileMapping ile bile, daha büyük dosyaların bir kısmını belleğe aktarabilirsiniz, böylece dosya sistemi tarafından dayatılan bir sınır yoktur.

+0

oh, eğer fstream dosya boyutu üzerinde bir sınırlama yoksa, benim için harika bir haber olacak çünkü 4GB sınırını önlemek için dosyamı nasıl parçalara ayıracağımı bilmiyorum. Teşekkürler – user1285419

+1

"Windows 7 kesinlikle bu dosya sistemini varsayılan olarak kullanmamalı." - Bu ifade çok geniştir. Ancak, soru 40GB veya 60GB'lık bir dosya içerdiğinden, muhtemelen USB flash bellekte değil. –

+0

@Windowsprogrammer: exFAT – SigTerm

İlgili konular