====== 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