Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » std::wstring und ifstream

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.12.2008, 10:05 Uhr
Pler
Einer von Vielen
(Operator)


Guten Morgen.
Ich möchte eine Datei einlesen, deren Namen ich als wstring bekomme. Scheint unter Linux nicht möglich zu sein. Unter Windows gehts.
Ich habe gelesen, daß der Konstruktor von ifstream nicht im Standard ist und deher Implementierungsabhängig ist.

Daher die Frage, wie könnte ich das umgeben?

Der String ist übrigens wstring, da "oben" mit Qt gearbeitet wird. Und aus einem QString bekommt man nur (1) einen stdString, was eventuell Informationsverlust bedeutet oder (2) wstring.

Ich habe hier versucht das Ganze auf ein kleines Beispiel zu vereinfachen:
(kompiliert unter Windows, nicht unter Linux)


C++:
#include <fstream>
#include <string>
#include <iostream>
using namespace std;

int funktion(wstring filename)
{
  wifstream in(filename.c_str());
  wstring str;
  while(getline(in,str)) {
    cout << str << endl;
  }
  return 0;
}

int main(int argc, char * argv[])
{
  return 0;
}




g++     versuch.cpp   -o versuch:

versuch.cpp: In function ‘int funktion(std::wstring)’:
versuch.cpp:8: error: no matching function for call to ‘std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::basic_ifstream(std::wstring&)’
/usr/include/c++/4.3/fstream:442: note: candidates are: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>]
/usr/include/c++/4.3/fstream:428: note:                 std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>]
/usr/include/c++/4.3/iosfwd:86: note:                 std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::basic_ifstream(const std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >&)


Dieser Post wurde am 14.12.2008 um 10:12 Uhr von Pler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.12.2008, 10:40 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


jup der Standard definiert keinen konstruktor bzw open mit wstring als typ, Visual Studio hat da eben eine Erweiterung des Standards (welche in diesem Fall meiner Meinung nach Sinn macht)

du könntest evtl sowas machen (aber iwie zerhaut das natürlich wieder das utf-8 o.ä im dateinamen, schätz ich mal:


C++:
int funktion(wstring filename)
{
  string f(filename.begin(), filename.end());

  wifstream in(f.c_str());

  wstring str;
  while(getline(in,str)) {
    wcout << str << endl;
  }
  return 0;
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.12.2008, 09:17 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Hat QT nicht eine Funktion um Dateien zu öffnen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.12.2008, 09:56 Uhr
Pler
Einer von Vielen
(Operator)


@FloSoft:
Ja, so mach ich es erst mal, bis ich eine bessere Lösung finde

@Pirat:
Ja, aber meine "lib" gab schon vorher. Und die will ich eigentlich nicht an Qt "anpassen".
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: