2009-08-29 23 views
6

Bellekte char [] arabelleğinde jpeg görüntüsü var, tek yapmam gereken diske aynen olduğu gibi yazmak. Şu anda buC++ ofstream write() yöntemi neden ham verilerimi değiştiriyor?

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

yapıyorum ama görüntü hakkını çıkmıyor, her yerde rastgele siyah ve beyaz çizgili bozuk görünüyor. Görüntüyü orijinal ile bir hex görüntüleyicide karşılaştırdıktan sonra, yeni satır karakterini yazdığımı düşündüğümde veri akışının veriyi değiştirdiğini öğrendim. 0x0A'nın orijinalde göründüğü anyplace, ofstream iki bayt olarak yazıyor: 0x0D0A. Akımın LF'den sadece CRLF'ye dönüştürmeyi planladığını varsaymak zorundayım, bunu yapmamak için standart bir yol var mı?

dosyayı açtığınızda

cevap

9

Sen binary dosya modunu ayarlamak gerekir bunun:

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

Bu şekilde akışı doesn Yeni satırları yerel metin biçiminize göre ayarlamaya çalışın.

5

İçindekileri ikili olarak açmayı deneyin. Böyle şey çalışması gerekir:

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

ikili modda dosyası açılırken olmadığından, varsayılan olarak biçimlendirilmiş çıktı ayarlanır. Biçimlendirilmiş çıktıda, uygulamanız, tanımladığınız satır sonu karakterlerinin dönüşümünü gerçekleştirir.

-2

Sürümlerimi hiç bir şey yazamayabilseydim ... hatalar, hiçbir şikayetler, hata ayıkladığınızda hiçbir şey yanlış olmaz, ancak dosyayı oluşturmaya bile çalışmaz. Fopen, fwrite ve fclose ile neyin yanlış olduğunu ... Onlarla bir sorunum olmadı

İlgili konular