से बाइट्स को पढ़ें और लिखें, मुझे लगता है कि मुझे शायद एक fstream ऑब्जेक्ट का उपयोग करना होगा, लेकिन मुझे यकीन नहीं है कि कैसे। अनिवार्य रूप से मैं एक बाइट बफर में फ़ाइल में पढ़ना चाहता हूं, इसे संशोधित कर सकता हूं, फिर इन बाइट्स को एक फ़ाइल में फिर से लिखना चाहता हूं। तो मुझे बस यह जानने की जरूरत है कि बाइट i/o कैसे करें।फ़ाइल (C++)
उत्तर
#include <fstream>
ifstream fileBuffer("input file path", ios::in|ios::binary);
ofstream outputBuffer("output file path", ios::out|ios::binary);
char input[1024];
char output[1024];
if (fileBuffer.is_open())
{
fileBuffer.seekg(0, ios::beg);
fileBuffer.getline(input, 1024);
}
// Modify output here.
outputBuffer.write(output, sizeof(output));
outputBuffer.close();
fileBuffer.close();
स्मृति से मुझे लगता है कि यह इस तरह है।
मैं आमतौर पर उन्हें गतिशील बना देता हूं क्योंकि मैं उन्हें एक फ़ंक्शन पसंद में नहीं डालूंगा – Craig
आपको अभी भी नया उपयोग करने के बाद m_content को हटाने की आवश्यकता है। सी ++ में कचरा संग्रह नहीं है। इसके अलावा 1024 बाइट स्टैक पर आसानी से फिट होना चाहिए ताकि केवल 'char m_content [1024]; ' –
^हाँ इसे न भूलें: डी। – Craig
फ़ाइल I/O करते समय, आपको फ़ाइल और त्रुटि शर्तों के अंत में लूप जांच में फ़ाइल को पढ़ना होगा। आप इस
while (fileBufferHere.good()) {
filebufferHere.getline(m_content, 1024)
/* Do your work */
}
तरह उपरोक्त कोड का उपयोग कर सकते यदि आप एक छोटे फ़ाइल आकार के साथ काम कर रहे हैं, तो मेरा सुझाव है कि पूरे फ़ाइल को पढ़ने में आसान है। फिर बफर के साथ काम करें और फिर पूरे ब्लॉक को लिखें। ये बताएंगे कि कैसे ब्लॉक पढ़ने के लिए - यह सोचते हैं आप जबाब
// open the file stream
.....
// use seek to find the length, the you can create a buffer of that size
input.seekg (0, ios::end);
int length = input.tellg();
input.seekg (0, ios::beg);
buffer = new char [length];
input.read (buffer,length);
// do something with the buffer here
............
// write it back out, assuming you now have allocated a new buffer
output.write(newBuffer, sizeof(newBuffer));
delete buffer;
delete newBuffer;
// close the file
..........
या बस बफर को बदलना चाहिए और उसे वापस लिखना चाहिए। –
सभी संशोधन प्रकार पर निर्भर करते हैं। अगर यह स्ट्रीम में एक या एक से अधिक बाइट्स के प्रतिस्थापन में से एक है तो यह आसान होगा। हालांकि, अगर परिवर्तन इसे और बाइट जोड़ता है, तो यह मेमोरी ओवरफ्लो अपवाद का कारण बन सकता है - जो एक आम गड़बड़ी है। –
- 1. पार्स कॉन्फ़िग फ़ाइल C/C++
- 2. C#include फ़ाइल नाम
- 3. फ़ाइल का स्वामित्व लें C#
- 4. इंटरफ़ेस आईडीएल फ़ाइल को C#
- 5. मैं C# या बैच फ़ाइल
- 6. C++
- 7. C.
- 8. मैं ASP.net/C# ऐप कॉन्फ़िगरेशन फ़ाइल मान
- 9. कंसोल एप्लिकेशन में App.Config फ़ाइल C#
- 10. निगरानी फ़ाइल में परिवर्तन C++ linux
- 11. फ़ाइल शामिल किए जाने त्रुटियों (C++): ______
- 12. C/C++ कोड
- 13. C/C++ Preprocessing त्रुटि
- 14. C/C++
- 15. के लिए विरासत C/C++
- 16. C#
- 17. Qt, C++ और Obj-C/Cocoa
- 18. C/C++ पायथन मानक पुस्तकालय
- 19. Convert चटाई और C/C++
- 20. उत्पन्न और C/C++
- 21. लंबे C/C++
- 22. wpf C#
- 23. C++
- 24. .. C++
- 25. C++
- 26. C++
- 27. /C++
- 28. C++
- 29. % c
- 30. C++
आप द्विआधारी मोड में खोलना चाहते हैं ऊपर से खुला इनपुट/आउटपुट फ़ाइल में भरें। – GManNickG
@GManNickG इसे पर्याप्त तनाव नहीं दिया जा सकता है। ऐसा करने में विफलता आपको यादृच्छिक बग के साथ एक घंटे या उससे भी अधिक समय तक दीवार के खिलाफ अपने सिर को तोड़ने का कारण बन जाएगी। उदाहरण के लिए ... यदि आप एक यादृच्छिक 'cout << file_stream.tellg(); कहीं और कोड विफल करते हैं तो कोड काम करता है। – Tibor