Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

07.08.2007, 22:03

Bug oder feature?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

12

07.08.2007, 22:04

Natürlich ein Feature! ;)
@D13_Dreinig

13

07.08.2007, 23:05

Jetzt mal im ernst... was soll das ganze?
Wieso ist die C++ std lib in der hinsicht eingeschränkt?

Das Prinzip von Unicode ist dann mit C++ nicht komplett anwendbar...

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

14

08.08.2007, 01:07

Also das geht zumindest

C-/C++-Quelltext

1
2
3
wchar_t const* file = L"file.txt";
std::wofstream stream;
stream.open(file);

mfg Philipp

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

15

08.08.2007, 09:41

Nein, dürfte nicht gehen.

Die des Konstruktors und der Methode open() ist durch den Standard fest vorgegeben:

C-/C++-Quelltext

1
2
explicit basic_ofstream(const char* s,  ios_base::openmode mode = ios_base::out);
basic_filebuf<charT,traits>* open (const char* s, ios_base::openmode mode);


Der erste Parameter ist immer const char*, egal was für ein char-Type angegeben wird.

Der Datentyp wchar_t wurde übrigens aufgrund der Portabilität weggelassen, da zu der Zeit des Standardentwurfs nicht zwangsläufig Unicode von den Zielsystemen unterstützt wurde. Es wurde aber bereits der Vorschlag eingereicht das eine Überladene Version von open() auch const wchar_t* unterstützen soll.

Bei Implementationen die von manchen Microsoft IDEs mitgeliefert werden scheint diese Idee schon ungesetzt worden zu sein. Dürfte aber nach aktuellem Standard nicht konform sein!

Allerdings geht das ganze über einen Workaround, nämlich unter der Verwendung von _wopen (oder ein Equivalent, _wopen ist kein Standard):

C-/C++-Quelltext

1
2
int handle = _wopen( L"test.txt", _O_WRONLY | _O_CREAT, _S_IREAD |  _S_IWRIT );
std::wofstream stream( handle );
@D13_Dreinig

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

16

08.08.2007, 10:52

Also MSDN sagt mir folgendes.

Zitat von »"MSDN"«


basic_ofstream( );
explicit basic_ofstream(
const char *_Filename,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot
);
explicit basic_ofstream(
const wchar_t *_Filename,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot
);


Und so verwende ich die Klassen auch, auch wenn es nicht Standardkonform ist, da der Standard hier anscheinend wirklich noch unausgereift zu sein scheint. Denn kein Unicode zu unterstützen ergibt ja wirlich keinen Sinn.

mfg Philipp

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

17

08.08.2007, 11:01

Tu das. :roll: Und nein, der Standard ist hier nicht unausgereift. Warum das so ist hab ich ja bereits geschrieben!
@D13_Dreinig

18

08.08.2007, 12:02

Zitat von »"David_pb"«


Bei Implementationen die von manchen Microsoft IDEs mitgeliefert werden scheint diese Idee schon ungesetzt worden zu sein. Dürfte aber nach aktuellem Standard nicht konform sein!

Allerdings geht das ganze über einen Workaround, nämlich unter der Verwendung von _wopen (oder ein Equivalent, _wopen ist kein Standard):

C-/C++-Quelltext

1
2
int handle = _wopen( L"test.txt", _O_WRONLY | _O_CREAT, _S_IREAD |  _S_IWRIT );
std::wofstream stream( handle );


Wenn _wopen kein Standard ist, warum überschreibst du dass ganze dann mit "Allerdings geht das ganze über einen Workaround"?

Gibt es nun eine Standardkonforme Methode um wide strings als Dateiname zu übergeben oder nicht?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

19

08.08.2007, 12:09

Du musst schon genau lesen! Ich schrieb: ...oder ein Equivalent. Und nein, wie deiner Meinung nach sollte ein Standard eine komfortable Platformunabhängige Behandlung von Unicode Dateinamen vorschreiben? Das Thema Dateinamen ist höchst Betriebssystemabhängig. Es gibt also keine solche Möglichkeit und der Grund dafür ist das C++ auf vielen Plattformen verfügbar sein soll!
@D13_Dreinig

20

08.08.2007, 16:22

Kannst dir den Dateinamen aber in einen std::string umwandeln lassen ... mit Standardfunktionen!
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige