Seite 1 von 1

File Copy [Qt 3.31]

Verfasst: 24. August 2006 15:02
von bpl
Hi,
ich habe folgendes Problem, ich muss in meinem Projekt verschiedene Dateien von a nach b kopieren. Bei Textdateien ist dies kein Problem [habe ich den Umweg über TextStream genommen].

Die Dateien sind eigentlich alle klein, daher können sie ruhig nacheinander in den Speicher gelesen werden (Meiner Meinung nach).
Nun habe ich kleine png Pics und muss diese von A nach B kopieren, hat Jemand einen Tipp wie das gehen kann?

Für Qt 4 habe ich Funktionen [QFile::copy(source, destination) gefunden, für 3.3.1 bisher jedoch nicht. Wäre cool wenn mir Jemand weiterhelfen könnte!

mfG

bpl

Verfasst: 24. August 2006 15:13
von macman
Zu Qt3-Zeiten habe ich das mit reinem C gemacht. Zwei FILEs geöffnet und Byte für Byte von einem ins andere geschrieben. Andere hatten das Problem übrigens auch schon :-)
http://lists.trolltech.com/qt-interest/ ... 399-0.html

Verfasst: 24. August 2006 15:16
von Christian81
Soweit ich weiss gibt es sowas wie QFile::copy() in Qt3 nicht. aber QTextStream war doch schon ganz gut - ersetze es einfach durch QDataStream und fertig.

Verfasst: 24. August 2006 16:24
von Christian81
macman hat geschrieben: Andere hatten das Problem übrigens auch schon :-)
http://lists.trolltech.com/qt-interest/ ... 399-0.html
Aber die vorgeschlagene Lösung dort ist einfach grauenhaft... wozu gibts denn QDataStream?

Verfasst: 24. August 2006 16:42
von bpl
Hi...
ja cool werde es mit dem DataStream mal testen, klingt gut!

Die Lösung

Andere hatten das Problem übrigens auch schon Smile
http://lists.trolltech.com/qt-interest/ ... 399-0.html

fand ich auch nicht so genial, aber es funktioniert!

vielen Dank!

Verfasst: 25. August 2006 07:16
von macman
Christian81 hat geschrieben:Aber die vorgeschlagene Lösung dort ist einfach grauenhaft...
Ich weiß, hab es so auch nicht gemacht. Hier meine Lösung, hab sie gestern nicht so schnell gefunden.

Code: Alles auswählen

bool myDialog::copy_file(char *src, char *dest)
{
	FILE *dp,*sp;
	int c;
	sp = fopen(src,"rb"); 
	if (!sp) 
		return FALSE;
	dp = fopen(dest,"ab"); 
	if (!dp) 
	{
		fclose(sp);
		return FALSE;
	}
	while (1) 
	{
		c = getc(sp);
		if (feof(sp))
			break;
		fputc(c,dp);
	}
	fclose(sp);
	fclose(dp);
	return TRUE;
}

Verfasst: 25. August 2006 07:40
von Christian81
Deine Lösung finde ich aber auch nicht besser. char* als Filename ist nämlich seehr unglücklich. Deshalb sollte man hier schon QFile nehmen. Ausserdem ist Byte für Byte lesen auch nicht gerade performant, denke ich mal.