====== Dateien ======
Die Klasse ''QFile'' ermöglicht einfachen Zugriff auf Dateien auf der Festplatte. Über ''QDataStream'' (für Binärdaten) und ''QTextStream'' (für Text) ist sie ähnlich zu verwenden wie gewöhnliche C++-Filestreams. Weitere Informationen wie Berechtigungen und Pfadinformationen können durch ''QFileInfo'' abgefragt werden. Statische Methoden von ''QFileDialog'' stellen Auswahldialoge zur Verfügung. Da ihre Funktionalität zu umfangreich und größtenteils selbsterklärend ist möchte ich hier ausdrücklich auf die [[http://doc.trolltech.com/|Dokumentation]] verweisen.
===== Beispiele =====
==== Datei anlegen und Text hineinschreiben ====
#include
#include
#include
using namespace std;
int main ()
{
QFile file ("datei.txt");
if (!file.open (QIODevice::WriteOnly)) // Datei anlegen und auf Fehler prüfen
{
cout << "Datei konnte nicht angelegt werden: " << file.errorString ().toStdString () << endl;
return 1;
}
QTextStream stream (&file); // Stream für die Datei öffnen
stream << "Dieser Text steht nun in der Datei.\n"; // Text in die Datei schreiben
stream << "Das ist die zweite Zeile.\n";
stream << "Noch eine Zahl: " << 123;
return 0;
}
Inhalt der Datei "datei.txt":
Dieser Text steht nun in der Datei.
Das ist die zweite Zeile.
Noch eine Zahl: 123
==== Datei anlegen und binäre Daten hineinschreiben ====
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
QFile file ("datei.txt");
if (!file.open (QIODevice::WriteOnly)) // Datei erstellen
{
cout << "Datei konnte nicht angelegt werden: " << file.errorString ().toStdString () << endl;
return 1;
}
srand (time (NULL)); // Zufallsgenerator initialisieren
QDataStream stream (&file);
for (int i = 0; i < 10; i++)
stream << rand () % 100; // Zufallszahlen von 0-99 in die Datei schreiben
return 0;
}
Zur Ausgabe des Inhalts kann das folgende Beispiel verwendet werden.
==== vorgegebene Datei einlesen und binären Inhalt ausgeben ====
#include
#include
#include
using namespace std;
int main ()
{
QFile file ("datei.txt");
if (!file.open (QIODevice::ReadOnly))
{
cout << "Datei konnte nicht angelegt werden: " << file.errorString ().toStdString () << endl;
return 1;
}
QDataStream stream (&file);
int nr;
for (int i = 0; i < 10; i++)
{
stream >> nr; // Zahl aus der Datei einlesen
cout << nr << endl; // Zahl ausgeben
}
return 0;
}
==== Datei kopieren mit Auswahl über GUI ====
Um grafische Objekte wie einen Dateiauswahldialog anzeigen zu können muss eine ''QApplication''-Instanz erzeugt werden. Andernfalls erhält man einen Laufzeitfehler.
#include
#include
#include
#include
using namespace std;
int main (int argc, char *argv[])
{
QApplication app (argc, argv);
QString srcpath = QFileDialog::getOpenFileName (NULL, "Quelle ausswaehlen"), // Quelle auswählen
destpath = QFileDialog::getSaveFileName (NULL, "Ziel auswaehlen"); // Ziel auswählen
if (srcpath.isNull () || destpath.isNull ()) // prüfen ob die Auswahl einer Datei abgebrochen wurde
return 1;
QFile src (srcpath); // Dateiobjekt für Quelle erstellen
if (!src.copy (destpath)) // kopieren und auf eventuelle Fehler überprüfen
{
cout << "Fehler beim Kopieren: " << src.errorString ().toStdString () << endl;
return 1;
}
return 0;
}
==== Dateiinformationen ausgeben ====
#include
#include
#include
#include
#include
#include
using namespace std;
int main (int argc, char *argv[])
{
QApplication app (argc, argv);
QString filepath = QFileDialog::getOpenFileName (NULL, "Datei ausswaehlen");
if (filepath.isNull ())
return 1;
QFileInfo fileinfo (filepath); // FileInfo-Objekt für die Datei erstellen
// verschiedene Informationen der Datei ausgeben
cout << "Information zur Datei \"" << fileinfo.fileName ().toStdString () << "\":" << endl
<< "\tabsoluter Pfad: " << fileinfo.absolutePath ().toStdString () << endl
<< "\tDateiendung: " << fileinfo.completeSuffix ().toStdString () << endl
<< "\tErstelldatum: " << fileinfo.created ().toString ().toStdString () << endl
<< "\tausfuehrbar: " << (fileinfo.isExecutable () ? "ja" : "nein") << endl
<< "\tversteckt: " << (fileinfo.isHidden () ? "ja" : "nein") << endl
<< "\tBesitzer: " << fileinfo.owner ().toStdString () << endl
<< "\tGruppe: " << fileinfo.group ().toStdString () << endl;
return 0;
}
Mögliche Ausgabe:
Information zur Datei ".bash_history":
absoluter Pfad: /home/daniel
Erstelldatum: Mi. Apr 28 13:48:01 2010
ausfuehrbar: nein
versteckt: ja
Besitzer: daniel
Gruppe: daniel