[C++] fstream nazwa pliku w UNICODE

0

Witam,

używam fstream do zapisu / odczytu plików. Wszystko jest ok do momentu, gdy chcę np. nazwać plik c:\йфя.txt. Strumień się nie otwiera. Ani jak używam fstream ani wfstream.
Używam CG2009.

Jak użyć fstream aby można było zapisać plik o takiej nazwie?

0

U mnie działa bez problemu.

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
ifstream plik;
plik.open("йфя.txt");
string s;
getline(plik, s);
cout << s;

plik.close();
return 0;
}

Jedyne, co mi przychodzi do głowy to to, abyś zapisał plik źródłowy w UTF-8.

0

U mnie działa bez problemu.

Pod CG2009 czy czasem VC?

Ja nawet nie mogę otworzyć strumienia z taką nazwą. Więc to jak plik jest zapisany, nie ma znaczenia.

0

GCC. Możesz podać pełną nazwę CG?

0

CodeGear C++Builder 2009 :)


Hmm. Zrobiłem tak:

//...
wchar_t * wp = L"c:\йфя.txt";
std::fstream zapis(std::_wfopen(wp, L"w"));
//...

I działa. Tylko nie jestem pewny tego. Jak później użyję:

zapis.close();

To będzie ok?


A i tak do końca mnie to nie urządza. Bo jak otworzyć strumień, jak mam np. fstream przysłany jako parametr do funkcji, a więc nie mogę użyć przekazania FILE * w konstruktorze fstream.

0

Jak konstruktor ma takie rozszerzenie, to metoda open pewnie też ma...

0

No właśnie nie ma :|

0
-=mAkAbrAs=- napisał(a)

No właśnie nie ma :|
To pozostaje bardzo zły, bardzo nieprzenośny i w ogóle bardzo be sposób:

stream.~basic_fstream();
new (&stream) fstream(std::_wfopen(L"c:\��фя.txt", L"w"));
0

Hmmm, no dziwne. Musi być inny sposób. A gdybyś użył Glib::ustring? Choć pod CG2009 będzie to trochę bez sensu.
Coś takiego:

  wofstream zapis(_wfopen(L"c:\����фя.txt"));

ewentualnie

wfstream zapis(_wfopen(L"c:\����фя.txt", L"w"));

A tak à propos uważaj przy odczycie z pliku z kodowaniem UTF. Możesz natrafić na niedoczytanie pliku do końca. (chyba Cyrylica tak ma) Początek znaku jest taki sam, jak znak końca pliku.

0
Fanael napisał(a)

To pozostaje bardzo zły, bardzo nieprzenośny i w ogóle bardzo be sposób:

stream.~basic_fstream();
new (&stream) fstream(std::_wfopen(L"c:\йфя.txt", L"w"));

No tylko tak pozostaje chyba.

adam.chyla napisał(a)

A tak à propos uważaj przy odczycie z pliku z kodowaniem UTF. Możesz natrafić na niedoczytanie pliku do końca. (chyba Cyrylica tak ma) Początek znaku jest taki sam, jak znak końca pliku.

?? Jest tak?
Na chwilę obecną, interesuje mnie i tak tylko nazwa pliku w UNI.

0

Jakiego nagłówka używasz do _wfopen() ?

0

Pewnie cstdio, to jest rozszerzenie MS, Borlanda i pewnie jeszcze czyjeś...

0

Oprócz vcl.h tylko

#include <fstream>

A nie wiem co to tam sobie wewnętrznie includuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1