Qt4 Windows: Binary File zum schreiben oeffnen

Alles rund um die Programmierung mit Qt
Antworten
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Qt4 Windows: Binary File zum schreiben oeffnen

Beitrag von nando »

Hi,
irendwie schaffe ich es nicht unter WINDOWS eine Datei zum schreiben zu oeffnen.

So versuche ich es:

Code: Alles auswählen

//  m_newVersionFile = "testfile.exe"

m_pDownloadedFile = new QFile(m_newVersionFilename);

if (m_pDownloadedFile->open(QIODevice::WriteOnly) == QIODevice::NotOpen)
{
    QMessageBox::warning(0,
              FlightbookManager::instance().applicationTitle(), tr(
                  "Kann die Datei <b>") + m_newVersionFilename + tr(
                  "</b> nicht zum Schreiben öffnen."));
          return;
}

Der open call liefert immer QIODevice::NotOpen ...

Komisch... sieht einer was ich falsch mache?
Habe es auch schon mit dem absoluten Pfad im Dateinamen probiert,
leider auch ohne Erfolg....

Gruss,
Nando
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Der open-Call liefert true oder false:
http://doc.qt.nokia.com/4.6/qfile.html#open

Allerdings entspricht das in deinem Fall QIODevice::NotOpen. Was sagt QFile::exists()? Hast du Rechte im Verzeichnis?
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Hmmm ich würd den Vergleich mit diesem notOpen auch weglassen und direkt abfragen was QIODevice::open() zurückliefert.

Code: Alles auswählen

QFile file( blabla);

if( file.open( QIODevice::WriteOnly ) )
{
      // Öffnen hat geklappt
}
else
{
      // Öffnen hat net geklappt
}
Oder eben wie pfid sagte mit exists abprüfen ob die Datei überhaupt da ist.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Exasperation hat geschrieben:Hmmm ich würd den Vergleich mit diesem notOpen auch weglassen und direkt abfragen was QIODevice::open() zurückliefert.

Code: Alles auswählen

QFile file( blabla);

if( file.open( QIODevice::WriteOnly ) )
{
      // Öffnen hat geklappt
}
else
{
      // Öffnen hat net geklappt
}
Oder eben wie pfid sagte mit exists abprüfen ob die Datei überhaupt da ist.
Nunja, selbst wenn sie nicht da ist, sollte sie angelegt werden.
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Ja das sowieso..

Seltam..
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag von nando »

Ups, okay den rueckgabewert hat ich noch von einer anderen open methode.
Allerdings geht es mit bool auch nicht (logisch).
aber sehr seltsam.
Die Datei existiert nicht.
Ich will sie neu anlegen und dann uebers netzt ein binary file laden und in die datei schreiben.


Also jetzt so:

Code: Alles auswählen

	if (!m_pDownloadedFile->open(QIODevice::WriteOnly)) {
		QMessageBox::warning(0,
				FlightbookManager::instance().applicationTitle(), tr(
						"Kann die Datei <b>") + m_newVersionFilename + tr(
						"</b> nicht zum Schreiben öffnen."));
		return;
	}
In der Doku steht:
Note: In WriteOnly or ReadWrite mode, if the relevant file does not already exist, this function will try to create a new file before opening it.
Scheinbar geht das nicht.
Vielleicht ein Rechteproblem?
Aber ich hab adminrechte und ich schreibe in C:\DEVELOPMENT\test

Any ideas?
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag von nando »

okay....

war mein fehler.. oh man...
in m_newVersionFilename waren noch spaces hintendran...
fuck....
also fehlalarm..
alles funzt prima....
sorry!!
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Bei solchen Anwendungen steck ich meine Strings einfach einmal in QString::trimmed() rein, das entfernt alle spaces am Anfang und am Ende des Strings, falls welche vorhanden sein sollten. :)
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag von nando »

ja danke..
habs jetzt mit simplified() geloest...

gruss,
nando
Antworten