2009-08-29 25 views
6

मेरे पास मेमोरी में एक char [] बफर में एक जेपीईजी छवि है, मुझे बस इतना करना है कि डिस्क पर इसे बिल्कुल लिखना है। अभी मैं इससी ++ ऑफस्ट्रीम लिखने() विधि मेरे कच्चे डेटा को क्यों संशोधित करती है?

ofstream ofs; 
ofs.open(filename); 
ofs.write(buffer, bufferLen); 
ofs.close(); 

कर रहा हूँ, लेकिन छवि सही बाहर नहीं आना है, यह हर जगह यादृच्छिक काले और सफेद धारियों के साथ विकृत लग रहा है। एक हेक्स व्यूअर में मूल के साथ छवि की तुलना करने के बाद, मुझे पता चला कि ऑफस्ट्रीम डेटा को संशोधित कर रहा है जब ऐसा लगता है कि मैं एक न्यूलाइन चरित्र लिख रहा हूं। कहीं भी 0x0A मूल में दिखाई देता है, ऑफ़स्ट्रीम दो बाइट्स: 0x0D0A के रूप में लिखता है। मुझे लगता है कि ऑफस्ट्रीम केवल एलएफ से सीआरएलएफ में परिवर्तित करने का इरादा रखता है, क्या ऐसा करने के लिए इसे पाने का एक मानक तरीका है?

उत्तर

9

आप binary करने के लिए फ़ाइल मोड सेट चाहिए जब आप opening हैं यह:

std::ofstream file; 
file.open("filename.jpg", std::ios_base::out | std::ios_base::binary); 

इस तरह धारा नहीं करता है अपने मूल पाठ प्रारूप में न्यूलाइन को समायोजित करने का प्रयास न करें।

5

ऑफस्ट्रीम को द्विआधारी के रूप में खोलने का प्रयास करें। कुछ इस तरह काम करना चाहिए:

ofstream ofs; 
ofs.open(filename, ios::out | ios::binary); 
ofs.write(buffer, bufferLen); 
ofs.close(); 
1

जब से तुम द्विआधारी मोड में फ़ाइल खोलने नहीं कर रहे हैं, यह डिफ़ॉल्ट रूप से स्वरूपित उत्पादन को तैयार है। स्वरूपित आउटपुट में, आपका कार्यान्वयन आपके द्वारा वर्णित अंत-पंक्ति वर्णों के रूपांतरण को निष्पादित करता है।

-2

मेरी इच्छा है कि मैं कुछ भी लिखने के लिए अपना संस्करण प्राप्त कर सकूं ... कोई त्रुटि नहीं, कोई शिकायत नहीं, जब आप इसे डीबग करते हैं तो कुछ भी गलत नहीं होता है लेकिन यह फ़ाइल को भी कोशिश और बनाने की कोशिश नहीं करता है। फॉपेन, फेराइट और फ्लेक्स के साथ क्या गलत था ... मुझे उनके साथ कोई समस्या नहीं थी

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