QFtp Datei Speichern in QFile

Alles rund um die Programmierung mit Qt
Antworten
pfusterschmied
Beiträge: 91
Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:

QFtp Datei Speichern in QFile

Beitrag von pfusterschmied »

Hallo,
ich möchte Dateien von einem FTP Server laden.
Seltsamer weise funktioniert der nachstehende Code für *.txt Files. Daten werden vom Server geholt und können geöffnet werden.

Wenn ich das gleiche mit einer ausführbaren Datei mache (Linux als auch Win32) wir die Datei zwar runtergeladen, kann jedoch nicht geöffnet werden.

Muss ich ausführbare Dateien irgendwie codiert senden(QFtp::Binary) bzw. in QFile abspeichern oder ???
Bitte um einen kleinen Tipp, steh total auf dem Schlauch.

Code: Alles auswählen

#ifdef Q_OS_WIN32 
		 QString fileName = "programm.exe";
	#else 
		 QString fileName ="text.txt";
	#endif
	file = new QFile(fileName);
	if (!file->open(QIODevice::WriteOnly)) 
	{
		updateText += "<b>Verzeichniszugriff fehlgeschlagen!</b><br /> Bitte stellen Sie sicher, dass Sie Schreibrechte besitzten.<br />";
		updateText += "Error: " + QDir::convertSeparators(file->fileName()) +"!";
		textBrowserProcess->setHtml(updateText);
		return;
	}
	qDebug() << path; 
	ftp.get(path,file);
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Jepp, QFtp::Binary setzen. Ich musste auch noch QIODevice::Unbuffered beim Öffnen der Datei angeben (waren keine executables, aber eben auch binary):

Code: Alles auswählen

file->open( QIODevice::WriteOnly | QIODevice::Unbuffered );
ftp->get( fn, file, QFtp::Binary );
Grüße
Franz
pfusterschmied
Beiträge: 91
Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:

Zusatzinfo

Beitrag von pfusterschmied »

Hab unter Linux die heruntergeladene Datei gestartet. Folgende fehlermeldung:

Code: Alles auswählen

$ ./programmname
$ bash: ./programmname: Text file busy
Irgendwie wird die Datei mit QFile falsch abgespeichert.
pfusterschmied
Beiträge: 91
Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:

Beitrag von pfusterschmied »

Danke für die rasche Antwort.

Anmerkung: Abreite derzeit unter Ubuntu. Die Probleme treten jedoch auch auf der Windowskiste auf.

Folgende neue Probleme:

Bei der Angabe von QIODevice::Unbuffered erhalte ich die Fehlermeldung, dass ich keine Schreibrechte besitzte.

Bei der Verwendung von QFtp::Binary erhalte ich beim Ausführen der Datei:
cannot execute binary file


Irgenwie bzw. Irgendwo ist da der Wurm drinnen.
pfusterschmied
Beiträge: 91
Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:

Danke

Beitrag von pfusterschmied »

Funktioniert jetzt sowohl auf Win32 als auch unter Linux:

Code: Alles auswählen

#ifdef Q_OS_WIN32
			if (!file->open(QIODevice::WriteOnly) | QIODevice::Unbuffered) 
		#else
			if (!file->open(QIODevice::WriteOnly)) 
		#endif
		{
			updateText += "<b>Verzeichniszugriff fehlgeschlagen!</b><br /> Bitte stellen Sie sicher, dass Sie Schreibrechte besitzten.<br />";
			updateText += "Error: " + QDir::convertSeparators(file->fileName()) +"!";
			textBrowserProcess->setHtml(updateText);
		}
		else
		{
			ftp.cd("ftp");
			qDebug() << path;
			qDebug() << ftpUrl;

			ftp.get("EPManager.exe",file,QFtp::Binary);
		}
pfusterschmied
Beiträge: 91
Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:

Beitrag von pfusterschmied »

Fehlinformation!
Der oben stehende Code funktioniert nur unter Linux.
Kann mir jemand sagen warum unter Windows die heruntergeladene Datei nicht ausführbar ist?

Fehlermeldung: Keine zulässige Win32 Anwendung

Mir ist aufgefallen, dass die Heruntergeladene Datei um 2kb keiner ist als die Originaldatei.

Folgende Code wurde verwendet:

Code: Alles auswählen


         if (!file->open(QIODevice::WriteOnly)) 
      { 
         updateText += "<b>Verzeichniszugriff fehlgeschlagen!</b><br /> Bitte stellen Sie sicher, dass Sie Schreibrechte besitzten.<br />"; 
         updateText += "Error: " + QDir::convertSeparators(file->fileName()) +"!"; 
         textBrowserProcess->setHtml(updateText); 
      } 
      else 
      { 
         ftp.cd("ftp"); 
         qDebug() << path; 
         qDebug() << ftpUrl; 

         ftp.get("EPManager.exe",file,QFtp::Binary); 
      }
Weiters spinnt die QProcessBar unter Windoof. Sobald der Dateidownload startet zeigt diese absolut nichts mehr an:

Code: Alles auswählen


connect(&ftp, SIGNAL(dataTransferProgress( qint64,  qint64)), this, SLOT(updateDataReadProgress(qint64, qint64)));

void epmupdater::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
{
	// ProgressBar
	progressBar->setMaximum(totalBytes);
	progressBar->setValue(bytesRead);

}
Antworten