2013-01-03 13 views
5

यह एक साधारण सवाल है कि मुझे उम्मीद है कि आसानी से उत्तर दिया जा सकता है, क्या फ़ाइल स्ट्रीम पढ़ने और लिखने के लिए ऑपरेटर पॉइंटर को स्थानांतरित करता है?fstream पढ़ने/लिखने की चाल फ़ाइल सूचक

cpos=10000; 
for (i=0;i<20;i++) { 
    dataFile.seekg(cpos+i,ios::beg); 
    dataFile.read(carray[i],1); 
} 

है यह समान (तार्किक) करने के लिए:

dataFile.seekg(cpos,ios::beg);  
cpos=10000; 
for (i=0;i<20;i++) { 
    dataFile.read(carray[i],1); 
} 

दूसरे शब्दों में, करता carray [] एक ही सामग्री शामिल परवाह किए बिना जो की विधि प्रयोग किया जाता है (मैं नहीं देख सकते हैं एक उदाहरण के रूप पहली विधि कुशल है इसलिए मैं उम्मीद कर रहा हूं कि सही उत्तर हाँ है)। यदि हां, तो वही व्यवहार लिखने के संचालन द्वारा प्रदर्शित किया जाता है?

उत्तर

5

हां, यह वही तरीका है जो काम करता है। हालांकि, आपके उदाहरण काफी समान नहीं हैं। आपका पहला उदाहरण 10000 से पढ़ता है, फिर 10001, फिर 10002 इत्यादि। दूसरी को प्रारंभिक स्थिति सेट करने के लिए लूप के बाहर एक खोज की आवश्यकता होती है।

cpos=10000; 
dataFile.seekg(cpos,ios::beg); 
for (i=0;i<20;i++) { 
    dataFile.read(carray[i],1); 
} 
+0

क्षमा करें, मुझे पता है कि - मैं केवल लूप में गैर-मांग का प्रदर्शन कर रहा था। पुष्टि के लिए धन्यवाद। – mlewis54

1

हाँ, फ़ाइल सूचक स्वचालित रूप से ले जाया जाता है पढ़ने के द्वारा और संचालन बारे में: 100% के बराबर होने के लिए, आप अपने दूसरे उदाहरण की तरह लग की आवश्यकता है। ... और प्रदर्शन प्रदर्शन में सुधार करता है। इसके अलावा, file.read(ptr, 20) का उपयोग 20 बार file.read(ptr + i, 1) का उपयोग करने से बहुत तेज़ है। एक ही अर्थशास्त्र प्राप्त करने के लिए, आपको एक खोज का उपयोग करके उचित स्थान पर नेविगेट करना होगा।

फ़ाइल स्ट्रीम में खोजना स्ट्रीम को उस स्थिति में सेट करता है जहां यह दोनों पढ़ना या लिखना अक्षर जारी रख सकता है: पढ़ने/लिखने के तरीके में खोले गए स्ट्रीम के लिए पढ़ने और लिखने के बीच स्विच करने के लिए (std::ios_base::in | std::ios_base::out) एक परिचय देना आवश्यक है मांगना। प्रत्येक व्यक्ति, इस प्रकार, उपलब्ध बफर को एक मजेदार तरीके से सेट करता है, जिसे धाराओं को करने की आवश्यकता नहीं होती है अगर यह केवल वर्णों के अनुक्रम को पढ़ता या लिखता है। साथ ही, जब प्रत्येक खोज लिखते हैं तो कम से कम जांच करता है कि कोड रूपांतरण के लिए प्रारंभिक स्थिति में जाने के लिए अक्षर लिखना आवश्यक है या नहीं।

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