Seite 1 von 1

Qt4 Windows: Binary File zum schreiben oeffnen

Verfasst: 30. Juli 2010 10:54
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

Verfasst: 30. Juli 2010 11:05
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?

Verfasst: 30. Juli 2010 11:13
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.

Verfasst: 30. Juli 2010 11:25
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.

Verfasst: 30. Juli 2010 11:26
von Exasperation
Ja das sowieso..

Seltam..

Verfasst: 30. Juli 2010 11:34
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?

Verfasst: 30. Juli 2010 13:25
von nando
okay....

war mein fehler.. oh man...
in m_newVersionFilename waren noch spaces hintendran...
fuck....
also fehlalarm..
alles funzt prima....
sorry!!

Verfasst: 30. Juli 2010 14:01
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. :)

Verfasst: 30. Juli 2010 14:41
von nando
ja danke..
habs jetzt mit simplified() geloest...

gruss,
nando