Seite 1 von 1

fopen Problem!

Verfasst: 12. Mai 2012 12:46
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

Re: fopen Problem!

Verfasst: 12. Mai 2012 13:40
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<<

Re: fopen Problem!

Verfasst: 12. Mai 2012 13:51
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.

Re: fopen Problem!

Verfasst: 12. Mai 2012 14:54
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

Re: fopen Problem!

Verfasst: 12. Mai 2012 15:39
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 ;-)

Re: fopen Problem!

Verfasst: 12. Mai 2012 16:27
von sandmen

Code: Alles auswählen

lf = fopen(fileName.toLatin1().constData(), "rb");
Das war's.
Vielen Dank :D

Re: fopen Problem!

Verfasst: 12. Mai 2012 16:44
von Herzogswalder
Lies dir bitte noch mal den letzten Satz im Post von Christian81 durch.

Re: fopen Problem!

Verfasst: 12. Mai 2012 19:27
von sandmen

Code: Alles auswählen

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