गुगल फ़ाइल इनपुट मुझे फ़ाइल से पाठ इनपुट करने के दो तरीके मिले - fopen और ifstream। नीचे दो स्निपेट हैं। मेरे पास एक टेक्स्ट फ़ाइल है जिसमें एक पूर्णांक वाला एक लाइन है जिसमें मुझे पढ़ने की आवश्यकता है। क्या मुझे फॉपेन या ifstream का उपयोग करना चाहिए?एक टेक्स्ट फ़ाइल पढ़ना - fopen बनाम ifstream
SNIPPET 1 - fopen
FILE * pFile = fopen ("myfile.txt" , "r");
char mystring [100];
if (pFile == NULL)
{
perror ("Error opening file");
}
else
{
fgets (mystring , 100 , pFile);
puts (mystring);
fclose (pFile);
}
SNIPPET 2 - ifstream
string line;
ifstream myfile ("example.txt");
if (myfile.is_open())
{
while (myfile.good())
{
getline (myfile,line);
cout << line << endl;
}
myfile.close();
}
else
{
cout << "Unable to open file";
}
'स्ट्रीम स्ट्रीमर (फ़ाइल * स्ट्रीम) {fgets (लाइन, लेन, स्ट्रीम) क्यों नहीं होगा; पुट (लाइन); } 'अनिवार्य रूप से समान होना चाहिए? –
क्या फॉपेन या tmpfile के कॉल के बिना 'FILE * 'बनाना संभव है? मुझे विश्वास नहीं है कि यह है, लेकिन मैं गलत हो सकता हूं। चूंकि 'stream_reader' के संचालन के लिए केवल एक स्ट्रीम की आवश्यकता होती है, न कि फ़ाइल, मैं इसे' फ़ाइल * 'की आवश्यकता के बजाय इसे अधिक नहीं समझूंगा। यूनिट परीक्षणों में उदाहरण के लिए, इसे 'फ़ाइल *' के बजाय स्ट्रिंग स्ट्रीम पास करना आसान हो सकता है। –
हां, उस परिप्रेक्ष्य से, सी संस्करण अधिक कड़ाई से बाधित है - 'FILE *' के लिए कोई प्रावधान नहीं है जो कम से कम मानक में फ़ाइल के बजाय स्ट्रिंग को संदर्भित करता है (हालांकि कुछ पुस्तकालयों ने इसे प्रदान/उपयोग किया है कम से कम आंतरिक रूप से, कुछ समय के लिए)। यदि आपको * वास्तव में * इससे बचने की ज़रूरत है, तो आप लेखन करने के लिए एक फ़ंक्शन में पॉइंटर पास कर सकते हैं, लेकिन यह निश्चित रूप से बेकार है। –