Üzerinde çalıştığım projede, oldukça az sayıda dizeyle ilgileniyorum; dizeler, ikili dosyalardan kodlamalarıyla birlikte (tek veya çift bayt olabilir) okunur. Aslında, dize değerini vector<char>
olarak okuyorum, kodlamayı okudum ve tüm dizeleri tutarlılık için wstring
'a dönüştürüyorum.Unicode dosya adı C++ ile ikili dosya nasıl okunur?
Bu, oldukça iyi çalışır, ancak dosya adları çift baytlı karakter olabilir. Giriş akışını gerçekten nasıl açacağım konusunda çok şaşırdım. C içinde wchar_t* path
'u geçen _wfopen
işlevini kullanırdım, ancak wifstream
farklı şekilde davranıyor gibi görünüyor, çünkü çift baytlık bir dosyadan tek bayt okumak için değil, bir dosyadan çift baytlı karakterleri okumak için özel olarak tasarlanmıştır.
Bu sorunun çözümü nedir?
Düzenleme: Ağda arama yapılması, standart C++ 'da hiç destek görmüyor gibi görünüyor (ör. Bkz. this discussion). Ancak, C++ 11'in gerçekten bu alanda yararlı bir şey ekleyip eklemediğini merak ediyorum.
'wchar_t' ve' wstring' kullanmaktan kaçınıyorum çünkü 'wchar_t' derleyicilerde taşınabilir değildir (VC++’da 16 bit, gcc’de 32 bit). C++ 11, char16_t ve char32_t türlerini tanıtır, ancak açıkçası kendiniz yazabilirsiniz. –
@Matthieu M. VC++ ile ilgili endişelerim yok, çünkü zaten benim hedef derleyicilerimden biri değil. İlk olarak unix tabanlı sistemlerde çalışan kodları almam gerekiyor. –
İşte aynı soru ama sadece pencereler için: [Bir Unicode dosya adıyla std :: fstream (ofstream veya ifstream) nasıl açılır?] (Http://stackoverflow.com/q/821873/33499) Unix sistemlerinde – wimh