2012-04-08 9 views
7

मैं एक बड़ी फ़ाइल (शायद 60 जीबी से बड़ा) पढ़ने/लिखने के लिए एक सी ++ प्रोग्राम लिख रहा हूं। समस्या को गुमराह करके, ऐसा लगता है कि 32 बिट सिस्टम में फ़ाइल आईओ पर 2 जीबी सीमा है (मैं विंडोज 7 64 बिट का उपयोग कर रहा हूं लेकिन मेरा प्रोग्राम mingw32 के साथ संकलित किया गया था)। मेरे कार्यक्रम में, मैं फ़ाइल में एक समय में 10 पूर्णांक लिख रहा हूं और ये सभी संख्याएं कुछ एल्गोरिदम के आधार पर यादृच्छिक रूप से उत्पन्न होती हैं। ऐसा लगता है कि प्रोग्राम तब भी चला सकता है जब फ़ाइल का आकार 40 जीबी से बड़ा हो लेकिन प्रोग्राम के द्वारा पढ़ा गया डेटा वास्तव में फाइल या कुछ जंक नंबरों में संग्रहीत डेटा को जांचने का कोई तरीका नहीं है। लेकिन वैसे भी, कार्यक्रम किसी भी चेतावनी या त्रुटि की रिपोर्ट नहीं करता है। क्या 32-बिट प्रोग्राम में 60 जीबी से बड़ी फ़ाइल को पढ़ने/लिखना वाकई संभव है?सी ++ fstream द्वारा फ़ाइल पढ़ने/लिखने के लिए 2 जी सीमा है?

+0

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

+0

का संभावित डुप्लिकेट मुझे लगता है कि केरी ग्रेगरी द्वारा दिया गया लिंक 2GByte फ़ाइल सीमा प्रश्न का उत्तर देता है। यह जांचने का कोई तरीका नहीं है कि संख्याएं सही तरीके से लिखी गई हैं? यादृच्छिक संख्याओं को लिखने के बजाय, आप संख्या 0 से 2,147,483,647 (सभी सकारात्मक 32 बिट पूर्णांक) के अनुक्रम को लिखकर परीक्षण कर सकते हैं, जो एक 8 जीबी फ़ाइल होगी, फिर इसे वापस पढ़ें। – gbulmer

उत्तर

1

फ़ैट 32 फ़ाइल सिस्टम पर फ़ाइल आकार (4 जीबी अधिकतम, मुझे लगता है) पर एक सीमा है। विंडोज 7 निश्चित रूप से डिफ़ॉल्ट रूप से उस फाइल सिस्टम का उपयोग नहीं करना चाहिए।

इसके अलावा 32 बिट सिस्टम पर फ़ाइल आकार पर एक सीमा है जिसे आप CreateFileMapping/MapViewOfFile का उपयोग करके स्मृति में मैप कर सकते हैं। हालांकि, fstream आंतरिक रूप से CreateFileMapping/MapViewOfFile का उपयोग नहीं करता है, इसलिए फ़ाइल आकार के लिए कोई सीमा नहीं है (फाइल सिस्टम सीमाओं के अलावा)। और CreateFileMapping के साथ भी आप बड़ी फ़ाइल के हिस्से को मेमोरी में मैप कर सकते हैं, इसलिए फाइल सिस्टम द्वारा लगाए गए किसी भी सीमा से अलग कोई सीमा नहीं है।

+0

ओह, अगर fstream में वास्तव में फ़ाइल आकार पर सीमा नहीं है, तो यह मेरे लिए एक अच्छी खबर होगी क्योंकि मुझे नहीं पता कि 4 जीबी सीमा से बचने के लिए मेरी फाइल को टुकड़ों में कैसे तोड़ना है। धन्यवाद – user1285419

+1

"विंडोज 7 निश्चित रूप से डिफ़ॉल्ट रूप से उस फाइल सिस्टम का उपयोग नहीं करना चाहिए।" - वह बयान बहुत व्यापक है। हालांकि, चूंकि प्रश्न में 40 जीबी या 60 जीबी फ़ाइल शामिल है, यह शायद यूएसबी फ्लैश मेमोरी पर नहीं है। –

+0

@ विन्डोजप्रोग्रामर: एक्सएफएटी – SigTerm

संबंधित मुद्दे