मैं, मैं सिर्फ प्रत्येक पंक्ति में पहले वर्ण सेट करने के लिए कोशिश कर रहा हूँ एक पाठ फ़ाइल text.txt कि (सादगी प्रयोजनों के लिए) पढ़ता हैसी में टेक्स्ट फ़ाइल को कैसे पढ़ और ओवरराइट करें? 'एक्स', इसलिए करने के लिए
this is line one
this is line two
this is line three
फिर सादगी की खातिर
है मेरी वांछित परिणाम
xhis is line one
xhis is line two
xhis is line three
होगा तो मैं text.txt फ़ाइल खोलने कर रहा हूँ और एक ही पाठ फ़ाइल में वांछित उत्पादन के साथ प्रत्येक पंक्ति अधिलेखित करने के लिए कोशिश कर रहा। जबकि लूप में, मैंने प्रत्येक पंक्ति में पहला अक्षर 'x' पर सेट किया है। मैंने वैरिएबल "लाइन" को एक के बराबर भी सेट किया है, क्योंकि यदि यह पहली पंक्ति पर है, तो मैं फ़ाइल के अंत में बजाय ओवरराइट करने के लिए फ़ाइल की शुरुआत में रिवाइंड करना चाहता हूं। लाइन को तब बढ़ाया जाता है ताकि यह अगले पुनरावृत्ति के लिए रिवाइंड को छोड़ देगा, और दूसरी और तीसरी पंक्तियों को ओवरराइट करना जारी रखना चाहिए। यह पहली पंक्ति के लिए पूरी तरह से काम करता है।
किसी के पास कोई समाधान है? बीटीडब्लू, मैंने स्टैक ओवरफ्लो और अन्य साइटों पर बड़े पैमाने पर शोध किया है, और कोई भाग्य नहीं है। यहाँ मेरी कोड है और मेरे उत्पादन भी नीचे है:
#include <stdio.h>
#include <stdlib.h>
#define MAX 500
int main() {
char *buffer = malloc(sizeof(char) * MAX);
FILE *fp = fopen("text.txt", "r+");
int line = 1;
while (fgets(buffer, 500, fp) != NULL) {
buffer[0] = 'x';
if (line == 1) {
rewind(fp);
fprintf(fp, "%s", buffer);
}
else {
fprintf(fp, "%s", buffer);
}
line++;
}
free(buffer);
fclose(fp);
}
आउटपुट:
xhis is line one
this is line two
xhis is line two
e
x
आप इसे पढ़ते समय फ़ाइल को ओवरराइट नहीं कर सकते हैं। खैर, आप कर सकते हैं, लेकिन आप खराब डेटा प्राप्त कर सकते हैं। आपका ओएस क्या है? यदि यह लिनक्स/यूनिक्स है, तो इसे खोलने के बाद फ़ाइल को हटाएं - 'अनलिंक करें ("text.txt");' - फिर एक ही नाम के साथ एक ** नई ** फ़ाइल खोलें और संशोधित लाइनों को नई फ़ाइल में लिखें। आपके पास ** दो ** 'FILE *' चर होंगे। –
यह लाइन की शुरुआत में स्थित होना चाहिए। – BLUEPIXY
जगहों पर पुनर्लेखन फ़ाइलों को मुश्किल है। एक छोटे से ज्ञात महत्वपूर्ण तथ्य यह है कि जब आप उस सटीक स्थान पर पढ़ते हैं जहां आप लिखना शुरू करना चाहते हैं, तो आपको कुछ लिखना होगा जैसे 'fseek (fp, 0, SEEK_CUR)' _before_ आप लिखना शुरू करते हैं। और फिर आप फिर से पढ़ना शुरू करने से पहले लिखने के बाद। –