मेरे कोड वर्तमान में कुछ इस तरह (इन चरणों का कई कार्यों में splitted) दिखता है:स्पष्ट/सी में फ़ाइल काटना जब पहले से ही "r +" मोड में खुला
/* open file */
FILE *file = fopen(filename, "r+");
if(!file) {
/* read the file */
/* modify the data */
/* truncate file (how does this work?)*/
/* write new data into file */
/* close file */
fclose(file);
}
मैं जानता हूँ कि मैं "w"
में साथ फ़ाइल खोलने सकता है मोड, लेकिन मैं इस मामले में ऐसा नहीं करना चाहता हूं। मुझे पता है कि ftruncate
unistd.h
/sys/types.h
में एक फ़ंक्शन है, लेकिन मैं इन फ़ंक्शंस का उपयोग नहीं करना चाहता हूं, मेरा कोड अत्यधिक पोर्टेबल (विंडोज़ पर भी) होना चाहिए।
क्या फ़ाइल को बंद/दोबारा खोलने के बिना फ़ाइल को साफ़ करने की संभावना है? (छद्म कोड)
if(this is linux box)
use truncate()
else if (this is windows box)
use _chsize_s()
यह आपकी आवश्यकता के लिए सबसे सरल उपाय है:
ओपी एक मंच स्वतंत्र समाधान चाहता है और फ़ाइल को फिर से खोलना नहीं चाहता है। और अभी भी आर + का उपयोग करें। :) – askmish
@askmish जो संभव नहीं है :-P –
@Nkos: यह संभव है, लेकिन, इष्टतम समाधान वास्तव में जटिल होगा (बफर किए गए तंत्र का उपयोग करके कर्नेल कॉल को शामिल करना), जो ओपी का सवाल ओवरकिल लगता है। :( – askmish