Seite 1 von 1

[gelöst] QFtp::put - erstellt immer nur Dateien mit 0 Byte

Verfasst: 13. März 2009 20:36
von tYREL
Hallo,
ich sollte etwas Hilfe zu QFtp haben. Ich habe mir das Beispiel aus Qt4 Gui Entwicklung zu QFtp angesehen und wollte es um eine put Funktion erweitern. Dazu habe ich mir folgende Funktion überlegt.

Code: Alles auswählen

void QtTab::processUPItem(const QModelIndex& index)
{
	if ( index.isValid() )
	{
		if (!model -> fileInfo(index).isDir() )
		{
			QMessageBox::information(this, tr("Dateiauswahl"), tr("Date: %1") .arg(model->fileName(index) ));

			QString fileName = model->fileName(index);
			file = new QFile(fileName);
			if (!file->open(QIODevice::WriteOnly)) 
			{
				QMessageBox::information( this, tr("FTP"), tr("Unable to save the file %1: %2.")  .arg(fileName).arg(file->errorString()));
				return;
			}

			myftp->put(file, fileName);
			progressDialog->setLabelText(tr("Uploading %1...").arg(fileName));
			progressDialog->exec();
		}
	}
}
Jetzt habe ich aber folgendes Problem. Wenn der put Befehl ausgeführt wird, erfolgt sofort das Singal ftpcommandFinished. Die Datei ist angelegt ist aber immer nur 0 Byte groß, sollte aber eigentlich 40KB haben. Kann mir da jemand helfen?

Verfasst: 13. März 2009 20:46
von CLRS530
Wenn ich nicht ganz falsch liege, dann müsste deine Datei aber auch 0byte groß sein.
Du öffnest die Datei als write. Möchtest doch aber eigentlich davon lesen! Dannach müsste sie leer sein.

Mal davon ab, dass es dann natürlich auch nicht funktionieren kann.

Verfasst: 13. März 2009 21:02
von tYREL
Stimmt. Du hast recht damit, dass ich die Datei zum schreiben geöffnet habe. War natürlich ein Fehler, so ist es wenn man Routinen kopiert *GRINS*.
Ich habe jetzt auf ReadOnly geändert, aber leider bleibt das Problem bestehen, Datei ist immer noch 0 Byte groß. :roll:

Verfasst: 14. März 2009 08:42
von franzf
So weit ich weiß, muss man bei Qt ein QIODevice nicht öffnen, bevor man es an eine Funktion übergibt. Wenn es dir nur darum geht zu schauen, ob die Datei existiert, dann prüfe mit QFile::exists().
Also versuch noch mal, das open() weg zu lassen.

Und hast du dir auch mal aus dem SIGNAL den error-Parameter (bool) angeschaut, ob der nicht vllt. auf treu steht? Dann kannst du dir mit errorString() ne genauere Fehlermeldung ausgeben lassen.

Verfasst: 15. März 2009 13:31
von tYREL
Danke erstmal für Eure Hilfe :wink: .
Ich habe folgendes heraus gefunden und damit konnte ich das Problem auch lösen :D .

open() braucht den vollen Pfad um eine Datei zu öffnen. Leider habe ich diesen dann an die put anweisung über gebenm, welche aber zum speichern auf dem Ftp-Server ja nur den Filenamen braucht, jetzt klappt es auf jeden Fall. :lol:

Verfasst: 16. März 2009 08:10
von pfid
Wo wird file gelöscht?

Verfasst: 16. März 2009 12:29
von tYREL
wenn ftpcommandFinished() aufgerufen wird. :wink: