मैं जो बढ़ रही है (tail -F
क्या करता है करने के लिए कुछ इसी तरह) एक फ़ाइल से पढ़ने की कोशिश कर रहा हूँ, लेकिन मेरे कोड के साथ कुछ समस्या होना चाहिए:सी ++ में बढ़ती हुई टेक्स्ट फ़ाइल को कैसे पढ़ा जाए?
string log, logFile("test.log");
size_t p = 0;
while(true)
{
ifstream ifs(logFile.c_str());
ifs.seekg(p); //*1
while(ifs.eof() == false)
{
getline(ifs, log);
cout << log << endl;
p = ifs.tellg(); //*2
}
nanosleep(&pause, NULL);
}
लाइनों के बिना // * 1 और // * 2, लॉग फ़ाइल सही ढंग से इसके अंत तक पढ़ी जाती है, लेकिन यदि नई लाइनें जोड़े जाती हैं तो कुछ भी नहीं होता है।
तलाश और टेलग के साथ मैं फ़ाइल की वर्तमान अंत स्थिति को स्टोर करने की कोशिश कर रहा हूं, ताकि जब मैं इसे फिर से खोलूं, तो मैं वहां जा सकता हूं और जो भी जोड़ा गया है उसे पढ़ सकता हूं।
मैं जानना चाहता हूं कि मेरे कोड में क्या गलत है, और यदि इस उद्देश्य के लिए एक ही फ़ाइल को बंद करना और फिर से खोलना वास्तव में आवश्यक है।
धन्यवाद।
अब यह ठीक से काम कर रहा है। धन्यवाद। – Pietro
मैंने देखा कि यदि मैं लूप में ifstream ऑब्जेक्ट बनाता हूं तो यह काम करता है, लेकिन अगर मैं इसे बाहर बनाता हूं तो यह नहीं करता है। क्या इसे पढ़ने के लिए फ़ाइल को बंद करना और फिर से खोलना आवश्यक है? – Pietro
@Pietro, आपको अगले पढ़ने के प्रयास से पहले 'ifs.clear()' को कॉल करके 'ifstream' की eof स्थिति को साफ़ करने की आवश्यकता है। मैं _think_ 'tellg()' और 'seekg()' इस दृष्टिकोण के साथ अनावश्यक होगा। – hmjd