Serializace do souboru širokých znaků – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Serializace do souboru širokých znaků – C / C++ – Fórum – Programujte.comSerializace do souboru širokých znaků – C / C++ – Fórum – Programujte.com

 

Porcepoque0
Newbie
3. 12. 2012   #1
-
0
-

Dobrý den,

napsal jsem kód podobný tomuto:

...

class User
{
public:
	wchar_t name[21];
	wchar_t password[21];
};

...

User u;
   
   for(int i = 0;i<21;i++)
	   u.name[i]=L'\0';
   for(int i = 0;i<21;i++)
	   u.password[i]=L'\0';
   
   wcsncpy_s(u.name,L"Honza",wcslen(L"Honza"));
   wcsncpy_s(u.password,L"12345",wcslen(L"12345"));

   wofstream wof("C:\\Users\\ADMIN\\Documents\\Honza.txt",ios::out|ios::binary);
   wof.imbue(locale(""));
   wof.write((wchar_t*)&u,sizeof(User));
   wof.close();

   User user;
   wifstream wif("C:\\Users\\ADMIN\\Documents\\Honza.txt",ios::in|ios::binary);
   wif.imbue(locale(""));
   wif.read((wchar_t*)&user,sizeof(User));

   MessageBox(hWnd,user.name,L"Uživatelské jméno",MB_OK|MB_ICONINFORMATION);
   MessageBox(hWnd,user.password,L"heslo",MB_OK|MB_ICONINFORMATION);

První messagebox ukáže normálně jméno Honza. Druhý messagebox ukáže nesmyslné znaky. Po prohlédnutí
souboru Honza.txt jsem zjistil, že se heslo ani neuložilo (obsah souboru:Honza ).
Prosím o pomoc. Používam visual c++. dík.

Nahlásit jako SPAM
IP: 88.102.98.–
zlz
~ Anonymní uživatel
634 příspěvků
3. 12. 2012   #2
-
0
-

Sekne se ti to na prvním nulovém znaku a ten druhý řetězec obsahuje neinicilizovaná data. A nemůžeš takhle zapisovat celý objekt. Takhle nějak by to mělo vypadat:

class User
{
public:
	wstring name, password;

	wofstream& serialize(wofstream& os) { os << name << endl << password << endl; return os; }
	wifstream& unserialize(wifstream& is) { is >> name >> password; return is; }
};

wofstream& operator<< (wofstream& os, User& u) { return u.serialize(os); }
wifstream& operator>> (wifstream& is, User& u) { return u.unserialize(is); }

...
{
	User u;
	u.name = L"Honza";
	u.password = L"12345";

	wofstream wof("C:\\Users\\ADMIN\\Documents\\Honza.txt", ios::out|ios::binary);
	wof << u;
	wof.close();

	User user;
	wifstream wif("C:\\Users\\ADMIN\\Documents\\Honza.txt", ios::in|ios::binary);
	wif >> user;
	wif.close();

	MessageBox(0, user.name.c_str(), L"Uživatelské jméno", MB_OK|MB_ICONINFORMATION);
	MessageBox(0, user.password.c_str(), L"heslo", MB_OK|MB_ICONINFORMATION);

	return 0;
}
Nahlásit jako SPAM
IP: 80.188.216.–
Porcepoque0
Newbie
4. 12. 2012   #3
-
0
-

Tvůj kód převádí instance User na text. Vyřešil jsem to tak, že jsem nahradil wofstream za ofstream.
Ale nevim, proč to nefunguje s wofstream.

Nahlásit jako SPAM
IP: 88.102.98.–
zlz
~ Anonymní uživatel
634 příspěvků
4. 12. 2012   #4
-
0
-

Ne, můj kód serializuje a deserializuje objekt. Tvůj se pokouší data, kterými je objekt reprezentován v paměti, zapisovat jako text a jen náhodou v tomto konkrétním případě obsahuje jen ta dvě pole znaků.

Nahlásit jako SPAM
IP: 78.156.159.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý