2015-06-04 12 views
7

मुझे लगता है कि यह काफी सरल होना चाहिए, लेकिन मेरे गुगल ने अब तक मदद नहीं की है ... मुझे सी ++ में मौजूदा फाइल को लिखना होगा, लेकिन फाइल के अंत में जरूरी नहीं है।सी ++ में फ़ाइल के बीच में कैसे लिखें?

मुझे पता है कि जब मैं अपनी फ़ाइल में टेक्स्ट जोड़ना चाहता हूं, तो मैं अपने स्ट्रीम ऑब्जेक्ट पर open पर कॉल करते समय ध्वज ios:app पास कर सकता हूं। हालांकि, यह केवल मुझे फ़ाइल के बहुत अंत में लिखने देता है, लेकिन इसके बीच में नहीं।

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() { 

    string path = "../test.csv"; 

    fstream file; 
    file.open(path); // ios::in and ios::out by default 

    const int rows = 100; 
    for (int i = 0; i < rows; i++) { 
    file << i << "\n"; 
    } 

    string line; 
    while (getline(file, line)) { 
    cout << "line: " << line << endl; // here I would like to append more text to certain rows 
    } 


    file.close(); 

} 
+0

आप एक अनुक्रमित फ़ाइल लाइब्रेरी (जैसे [जीडीबीएम] (http://www.gnu.org.ua/software/gdbm/)) या [sqlite] (http://sqlite.org/) का उपयोग करना चाह सकते हैं , या यहां तक ​​कि एक पूर्ण डेटाबेस ([PostgreSQL] (http://postgresql.org/), [मोंगोडीबी] (http://mongodb.org/) ....) –

+0

फ़ाइलों को बदलने का मानक तरीका: इनपुट पढ़ें फ़ाइल, प्रक्रिया, नई आउटपुट फ़ाइल को लिखें, सफल होने पर, आउटपुट फ़ाइल के साथ इनपुट फ़ाइल को ओवरराइट करें। "तेज़" विकल्प हैं (जैसे ios :: ऐप), लेकिन वे प्रत्येक स्थिति के लिए नहीं हैं। – stefaanv

+5

क्या यह पहले से ही दस लाख बार नहीं पूछा गया है? –

उत्तर

11

आप फ़ाइल के बीच में सम्मिलित नहीं कर सकते:

मैं इस मुद्दे को वर्णन करने के लिए एक छोटी कार्यक्रम बनाया है। आपको पुरानी फ़ाइल को एक नई फाइल में कॉपी करना होगा और नई फ़ाइल में कॉपी करते समय मध्य में जो कुछ भी आप चाहते हैं उसे डालें।

अन्यथा, यदि आप मौजूदा फ़ाइल में डेटा/लाइनों को ओवरराइट करना चाहते हैं, तो फ़ाइल के भीतर स्थिति की पहचान करने के लिए std::ostream::seekp() का उपयोग करके यह संभव है।

+5

बस पूरा होने के लिए : आप फ़ाइल के बीच में _insert_ नहीं कर सकते हैं, लेकिन आप overwriting द्वारा _replace_, बाइट्स की एक ही संख्या कर सकते हैं। आगे बढ़ने के लिए –

+0

, उदाहरण कोड देखें; http://stackoverflow.com/questions/2393345/how-to-append-text-to-a-text-file-in-c – Anil

+1

मूल रूप से, आप seekp() सदस्य फ़ंक्शन का उपयोग करके कहीं भी फ़ाइल पॉइंटर को स्थानांतरित कर सकते हैं, और प्रारंभ करें लिख रहे हैं। हालांकि, ईओएफ से पहले कोई भी लिखिया पुराने डेटा को प्रतिस्थापित करेगा। – 911

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