Toto vlákno bylo označeno za vyřešené.
Scrat 0
Návštěvník
Dalsi zadrhel... rad bych pro zapis pouzival objekt FILE, nejak takto
FILE * errFile = _wfopen((const wchar_t *)TEXT("c:\\temp\\pokus.txt"), TEXT("wb"));
if (errFile == NULL)
return 0;
wchar_t ooo[3];
ooo[0] = TEXT('\r');
ooo[1] = TEXT('\n');
ooo[2] = TEXT('\0');
wstring retezec = TEXT("šžčžščžšž");
retezec += ooo;
for (int i = 0; i < 5; i++)
fputws(retezec.c_str(), errFile);
fclose(errFile);
Ono to tedy skoro i funguje... pokud to otevru v poznamkovym bloku, tak to vypada tak jak ma. Problem je pokud to otevru treba v Notepadu++, tam neni videt dobre zadny znak. Nicmene pokud v poznamkovem bloku odmazu posledni znak, tak se vse (krom posledniho odmazaneho znaku) zobrazi dobre i v Notepadu++.
Netrvam nutne na binarnim zapisu. Testoval jsem i zapisovat na zacatek souboru vselijaky BOMy, ale oba textaky je vzdycky zobrazili taky a vetsinou to neslo precist v ani jednom z nich.
BDS +3
Věrný člen
#1 Scrat
int main(int argc, char* argv[])
{
FILE * errFile = _wfopen(L"pokus.txt", L"wb");
if (errFile == NULL) return 0;
char boom[2]={0xFF, 0xFE};
wchar_t ooo[] = {L"\r\n"};
std::wstring retezec = L"šžčžščžšž";
retezec += ooo;
fwrite(boom, 1, 2, errFile);
for (int i = 0; i < 5; i++)
fputws(retezec.c_str(), errFile);
fclose(errFile);
return 0;
}
//---------------------------------------------------------------------------
ps. TEXT() jsem si nahradil L"" jen kvůli kompatibilitě
problém je v tom BOOM
BDS +3
Věrný člen
BOOM >> BOM
Scrat 0
Návštěvník
#3 BDS
Jo to je mozny, ale nevim jakej je spravnej, jsem testoval skoro vsechny co jsem vygoogloval a nic.
Scrat 0
Návštěvník
#2 BDS
Jeee ono to funguje, co jsem asi delal spatne.. dik.
Scrat 0
Návštěvník
Jeste je tedy zahada, proc pomahalo smazat ten posledni znak, kdyz problem byl na zacatku.
BDS +3
Věrný člen
#5 Scrat
Funguje, ale asi ne na všech systémech, správně by se asi měla zjistit "endialita" WCHARu a podle toho zvolit
0xFFFE / 0xFEFF.
třeba takto by to mohlo fungovat:
bool IsBigEndian()
{
wchar_t w = 0x0100;
return ((char)w == 0x01);
}
2. proč to pomohlo nevím, každopádně to nečetlo ten text ve správném formátu
Scrat 0
Návštěvník
#7 BDS
Tim "ne na vsech systemech" je mysleno, ze i v ramci systemu s windows to nemusi jit?
Zjistit počet nových příspěvků
Přidej příspěvek
Uživatelé prohlížející si toto vlákno Uživatelé on-line: 0 registrovaných, 40 hostů