fopen Problem!

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
sandmen
Beiträge: 15
Registriert: 23. April 2012 08:27

fopen Problem!

Beitrag von sandmen »

Hallo Forum,
ich habe ein Problem mit folgendem Code:
Unter Linux, erstellt mit QT Creator, läuft alles.
Leider unter Microsoft Visual Studio nicht, hier hat fopen ein Problem.
Mach ich einen grundsätzlichen fehler?

Code: Alles auswählen

void AQLogParser::ParseLogFile(QString fileName)
{
FILE *lf;
int i;
int count;

fileName = QDir::toNativeSeparators(fileName);
#ifdef Q_OS_WIN
const char* fi = fileName.toLatin1().constData();
#else
const char* fi = fileName.toUtf8().constData();
#endif
    lf = fopen(fi, "rb");
    if (lf) {
      ....
      .....
      ......
      .......
    }
else {
        qDebug() << "logDump: cannot open logfile\n";
    }
Warum ich keine QFile neheme? Weil ich keinen Stream gefunden habe, mit dem ich einzelne bytes, und mehrer Bytes in eine Struct schreiben kann.
Zudem läuft's ja auch unter Linux.

Vielen Dank für eure Tip's
Peter
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: fopen Problem!

Beitrag von franzf »

sandmen hat geschrieben:Leider unter Microsoft Visual Studio nicht, hier hat fopen ein Problem.
Und welches?
Warum ich keine QFile neheme? Weil ich keinen Stream gefunden habe, mit dem ich einzelne bytes, und mehrer Bytes in eine Struct schreiben kann.
Dafür gibts in C++ Operator-Überladung, speziell interessieren dich operator>> und operator<<
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: fopen Problem!

Beitrag von Christian81 »

[ocde]
const char* fi = fileName.toLatin1().constData();
[/code]
und nach dem Semikolion zeigt fi auf Datenmülll ...
toLatin1() erzeugt ein (temporäres) QByteArray welches aber sofort wieder zerstört wird.

Abgesehen davon ist weder toUtf8() noch toAscii() richtig. toLocal8Bit() ist das was Du suchst.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
sandmen
Beiträge: 15
Registriert: 23. April 2012 08:27

Re: fopen Problem!

Beitrag von sandmen »

und nach dem Semikolion zeigt fi auf Datenmülll ... toLatin1() erzeugt ein (temporäres) QByteArray welches aber sofort wieder zerstört wird.
Und was würde dann kein Datenmüll/temp array erzeugen?
Ich denke toLatin ist ja nur die Konvertierung.
Vielen Dank nochmals.
Peter
ScyllaIllciz
Beiträge: 200
Registriert: 9. Juli 2010 19:31

Re: fopen Problem!

Beitrag von ScyllaIllciz »

das sollte funktionieren:

Code: Alles auswählen

lf = fopen(fileName.toLatin1().constData(), "rb");
Hier bleibt der das temporäre Objekt so lange am Leben, bis die Funktion fopen fertig ist.
Mehr willst Du wahrscheinlich eh nicht ;-)
sandmen
Beiträge: 15
Registriert: 23. April 2012 08:27

Re: fopen Problem!

Beitrag von sandmen »

Code: Alles auswählen

lf = fopen(fileName.toLatin1().constData(), "rb");
Das war's.
Vielen Dank :D
Herzogswalder
Beiträge: 79
Registriert: 11. Oktober 2009 00:37
Wohnort: Dresden

Re: fopen Problem!

Beitrag von Herzogswalder »

Lies dir bitte noch mal den letzten Satz im Post von Christian81 durch.
Gruß, Herzogswalder
Qt 4.8, OS X Mountain Lion
sandmen
Beiträge: 15
Registriert: 23. April 2012 08:27

Re: fopen Problem!

Beitrag von sandmen »

Code: Alles auswählen

lf = fopen(fileName.toLocal8Bit().constData(),"rb");
Natürlich, hab's auch nur so probiert. :oops:
Danke
Antworten