Autor Wątek: Problem z zapisem wstring.  (Przeczytany 1166 razy)

Offline Kuba Z

  • Użytkownik

# Luty 10, 2010, 20:41:58
Otwieram plik za pomocą ofstream i chcę do niego zapisać łańcuch typu wstring, ale wtedy wyskakuje mi błąd, że operator << nie obsługuje tegoż typu. Proszę o podpowiedź jak powinienem to zrobić.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline cybek

  • Użytkownik
    • Strona domowa!

# Luty 10, 2010, 20:58:19
może funkcją składową write?

Offline ShadowDancer

  • Moderator

# Luty 10, 2010, 21:04:39
a nie ma czegoś w wersji wofstream? Ew. spróbuj konwertować na tablicę zwykłych charów...

Offline kamilek

  • Użytkownik

# Luty 10, 2010, 21:48:27
kiedyś też próbowałem korzystać z wstringa, ogólnie rozchodziło się o polskie znaki :)

nie wiem dokładnie jakie właściwości ma mieć text który zapisujesz.
Ale można najpierw skonwertować wstringa do stringa a potem zapisać text do pliku.
o ile się orientuje standardowa biblioteka nie posiada takiej funkcji konwertującej, więc trzeba ją samemu napisać.

np:
Kod: (cpp) [Zaznacz]
#include <iostream>

using namespace std;

string wstring_2_string(wstring wstr)
{
string str(wstr.length(),’ ‘);
copy(wstr.begin(),wstr.end(),str.begin());
return str;
}

wstring string_2_wstring(string str)
{
wstring wstr(str.length(),L’ ‘);
copy(str.begin(),str.end(),wstr.begin());
return wstr;
}


Offline Kuba Z

  • Użytkownik

# Luty 12, 2010, 23:21:45
Wofstream jest ale znowu do niego się nie da zapisać zwykłych stringów.
Funkcją write się raczej nie da.
Ja zrobiłem to tak:
Ponieważ miałem dane zapisane we wskaźniku do TCHAR przekonwertowałem to do char a później przypisałem do string i już poprostu zapisałem do fstream.
Co do funkcji konwertującej wstring na string też jest ok.
Dzięki.

Offline ShadowDancer

  • Moderator

# Luty 13, 2010, 00:44:12
Po co ci w programie stringi i wstringi? Ja zazwyczaj robię wszystko na jednych...

Offline Kuba Z

  • Użytkownik

# Luty 13, 2010, 00:51:57
Wszystko zaczęło się od tego SetWindowText(), gdyż nie przyjmuje on stringa. Użyłem więc TCHAR*, jednak gdy chciałem zapisać do pliku trza to bylo do stringa wpakować, i tak dalej......

Offline ShadowDancer

  • Moderator

# Luty 13, 2010, 00:59:37
Omg to ustaw w project -> general -> charset - no set.

Albo zrób #undef unicode(można tak)?

BTW. niech ktoś mądrzejszy się wypowie, czy lepiej używać char czy tchar?

Offline Kuba Z

  • Użytkownik

# Luty 13, 2010, 01:27:19
Ale ja chcę używać polskich liter, a gdy tak zrobię to przecież chyba nie będę mógł?

Offline ShadowDancer

  • Moderator

# Luty 13, 2010, 01:54:03
Ale ja chcę używać polskich liter, a gdy tak zrobię to przecież chyba nie będę mógł?

Zdecyduj się: polskich liter czy chińskich znaczków...

Offline Khaine

  • Użytkownik

# Luty 13, 2010, 02:25:40
Cytuj
Po co ci w programie stringi i wstringi? Ja zazwyczaj robię wszystko na jednych...
lokalizacja - wstring, nazwy (np. resource'ow) string. Wiele bibliotek używa ansi stringów.

Cytuj
Zdecyduj się: polskich liter czy chińskich znaczków...
zasadniczo do jednych i drugich wide char sie nada. Polskie znaki na utf8 tez można reprezentować, ale to dużo więcej roboty.

Offline Syriusz

  • Użytkownik

# Luty 13, 2010, 12:23:40
Cytuj
lokalizacja - wstring, nazwy (np. resource'ow) string. Wiele bibliotek używa ansi stringów.
Jednak, coraz więcej bibliotek używa UNICODE(DirectX, WinAPI, DevIL itd.) więc lepiej się na niego zdecydować, ostatecznie można konwertować na ASCII, w razie potrzeby...

Cytuj
zasadniczo do jednych i drugich wide char sie nada. Polskie znaki na utf8 tez można reprezentować, ale to dużo więcej roboty.
Nie ma chyba sensu w programie operować na takich łańcuchach, np. nie da się stwierdzić (w prosty sposób) ile bajtów usunąć, by usunąć jeden znak...

Offline Khaine

  • Użytkownik

# Luty 13, 2010, 13:35:27
Cytuj
Jednak, coraz więcej bibliotek używa UNICODE(DirectX, WinAPI, DevIL itd.) więc lepiej się na niego zdecydować, ostatecznie można konwertować na ASCII, w razie potrzeby...
z drugiej strony bardzo dużo projektów darmowych korzysta tylko z ascii. Tak naprawdę unicode przydaje się tylko do wyświetlania tekstu. W innych przypadkach to strata pamięci.

Cytuj
Nie ma chyba sensu w programie operować na takich łańcuchach, np. nie da się stwierdzić (w prosty sposób) ile bajtów usunąć, by usunąć jeden znak...
Cytuj
ale to dużo więcej roboty
;)
Jednak np. w CEGUI w ten właśnie sposób reprezentowany jest tekst.