Auf dieser Seite

QFile Class

Die Klasse „QFile“ bietet eine Schnittstelle zum Lesen aus und Schreiben in Dateien. Mehr...

Header: #include <QFile>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Erbt von: QFileDevice
Wird vererbt von:

QTemporaryFile

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Öffentliche Funktionen

QFile()
QFile(QObject *parent)
QFile(const QString &name)
(since 6.0) QFile(const std::filesystem::path &name)
QFile(const QString &name, QObject *parent)
(since 6.0) QFile(const std::filesystem::path &name, QObject *parent)
virtual ~QFile()
bool copy(const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)
(since 6.0) bool copy(const std::filesystem::path &newName)
bool exists() const
(since 6.0) std::filesystem::path filesystemFileName() const
(since 6.3) std::filesystem::path filesystemSymLinkTarget() const
bool link(const QString &linkName)
(since 6.0) bool link(const std::filesystem::path &newName)
bool moveToTrash()
(since 6.3) bool open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)
bool open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
bool open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
bool remove()
bool rename(const QString &newName)
(since 6.0) bool rename(const std::filesystem::path &newName)
void setFileName(const QString &name)
(since 6.0) void setFileName(const std::filesystem::path &name)
QString symLinkTarget() const

Neu implementierte öffentliche Funktionen

virtual QString fileName() const override
virtual bool open(QIODeviceBase::OpenMode mode) override
virtual QFileDevice::Permissions permissions() const override
virtual bool resize(qint64 sz) override
virtual bool setPermissions(QFileDevice::Permissions permissions) override
virtual qint64 size() const override

Statische öffentliche Mitglieder

bool copy(const QString &fileName, const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)
QString decodeName(const QByteArray &localFileName)
QString decodeName(const char *localFileName)
QByteArray encodeName(const QString &fileName)
bool exists(const QString &fileName)
(since 6.3) std::filesystem::path filesystemSymLinkTarget(const std::filesystem::path &fileName)
bool link(const QString &fileName, const QString &linkName)
bool moveToTrash(const QString &fileName, QString *pathInTrash = nullptr)
QFileDevice::Permissions permissions(const QString &fileName)
(since 6.0) QFileDevice::Permissions permissions(const std::filesystem::path &filename)
bool remove(const QString &fileName)
bool rename(const QString &oldName, const QString &newName)
bool resize(const QString &fileName, qint64 sz)
bool setPermissions(const QString &fileName, QFileDevice::Permissions permissions)
(since 6.0) bool setPermissions(const std::filesystem::path &filename, QFileDevice::Permissions permissionSpec)
(since 6.9) bool supportsMoveToTrash()
QString symLinkTarget(const QString &fileName)

Ausführliche Beschreibung

QFile ist ein E/A-Gerät zum Lesen und Schreiben von Text- und Binärdateien sowie Ressourcen. Ein QFile kann eigenständig oder – was praktischer ist – zusammen mit einem „ QTextStream “ oder „ QDataStream “ verwendet werden.

Der Dateiname wird in der Regel im Konstruktor übergeben, kann aber jederzeit mit ` setFileName()` festgelegt werden. `QFile` erwartet unabhängig vom Betriebssystem, dass das Dateitrennzeichen „/“ lautet. Die Verwendung anderer Trennzeichen (z. B. „\“) wird nicht unterstützt.

Sie können mit ` exists()` prüfen, ob eine Datei vorhanden ist, und mit ` remove()` eine Datei löschen. (Erweiterte Operationen im Zusammenhang mit dem Dateisystem werden von ` QFileInfo ` und ` QDir` bereitgestellt.)

Die Datei wird mit ` open()` geöffnet, mit ` close()` geschlossen und mit ` flush()` geleert. Das Lesen und Schreiben von Daten erfolgt in der Regel mit QDataStream oder QTextStream, Sie können jedoch auch die von QIODevice geerbten Funktionen read(), readLine(), readAll() und write() aufrufen. QFile erbt außerdem getChar(), putChar() und ungetChar(), die zeichenweise arbeiten.

Die Größe der Datei wird von ` size()` zurückgegeben. Mit ` pos()` können Sie die aktuelle Dateiposition abrufen oder mit ` seek()` zu einer neuen Dateiposition springen. Wenn Sie das Ende der Datei erreicht haben, gibt ` atEnd()` den Wert ` true` zurück.

Dateien direkt lesen

Das folgende Beispiel liest eine Textdatei zeilenweise ein:

    QFile file("in.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    while (!file.atEnd()) {
        QByteArray line = file.readLine();
        process_line(line);
    }

Das an ` open()` übergebene Flag ` Text ` weist Qt an, Zeilenenden im Windows-Stil („\r\n “) in Zeilenenden im C++-Stil („\n “) umzuwandeln. Standardmäßig geht `QFile` von binären Daten aus, d. h., es führt keine Umwandlung der in der Datei gespeicherten Bytes durch.

Verwendung von Streams zum Lesen von Dateien

Das folgende Beispiel verwendet ` QTextStream `, um eine Textdatei zeilenweise zu lesen:

    QFile file("in.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    QTextStream in(&file);
    while (!in.atEnd()) {
        QString line = in.readLine();
        process_line(line);
    }

QTextStream übernimmt die Konvertierung der auf der Festplatte gespeicherten 8-Bit-Daten in ein 16-Bit-Unicode- QString. Standardmäßig wird davon ausgegangen, dass die Datei in UTF-8 kodiert ist. Dies kann mit der Funktion „ QTextStream::setEncoding()“ geändert werden.

Zum Schreiben von Text können wir den Operator <<() verwenden, der so überladen ist, dass er links eine QTextStream und rechts verschiedene Datentypen (einschließlich QString) akzeptiert:

    QFile file("out.txt");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
        return;

    QTextStream out(&file);
    out << "The magic number is: " << 49 << "\n";

QDataStream verhält sich ähnlich: Sie können den Operator <<() zum Schreiben von Daten und den Operator >>() zum Zurücklesen verwenden. Einzelheiten finden Sie in der Klassendokumentation.

Signale

Im Gegensatz zu anderen Implementierungen von ` QIODevice `, wie beispielsweise ` QTcpSocket`, gibt `QFile` die Signale ` aboutToClose()`, ` bytesWritten()` oder ` readyRead()` nicht aus. Aufgrund dieses Implementierungsdetails eignet sich `QFile` nicht zum Lesen und Schreiben bestimmter Dateitypen, wie beispielsweise Gerätedateien auf Unix-Plattformen.

Plattformspezifische Probleme

Qt-APIs im Zusammenhang mit Ein- und Ausgabe verwenden UTF-16-basierte QStrings zur Darstellung von Dateipfaden. Standard-C++-APIs (<cstdio> oder <iostream>) oder plattformspezifische APIs benötigen jedoch häufig einen 8-Bit-kodierten Pfad. Mit den Funktionen encodeName() und decodeName() können Sie zwischen beiden Darstellungsformen konvertieren.

Unter Unix gibt es einige spezielle Systemdateien (z. B. in /proc), bei denen size() immer 0 zurückgibt, obwohl Sie möglicherweise dennoch weitere Daten aus einer solchen Datei lesen können; die Daten werden als direkte Reaktion auf Ihren Aufruf von read() generiert. In diesem Fall können Sie jedoch nicht mit ` atEnd()` feststellen, ob noch weitere Daten zum Lesen vorhanden sind (da ` atEnd()` für eine Datei, deren angegebene Größe 0 ist, den Wert „true“ zurückgibt). Stattdessen sollten Sie entweder ` readAll()` aufrufen oder wiederholt ` read()` bzw. ` readLine()` aufrufen, bis keine Daten mehr gelesen werden können. Im folgenden Beispiel wird ` QTextStream ` verwendet, um ` /proc/modules ` zeilenweise zu lesen:

    QFile file("/proc/modules");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    QTextStream in(&file);
    QString line = in.readLine();
    while (!line.isNull()) {
        process_line(line);
        line = in.readLine();
    }

Unter Android gelten beim Umgang mit Content-URIs einige Einschränkungen:

Sicherheitshinweise

Normalisierung von Windows-Pfaden

Qt-APIs, die Datei- und Verzeichnispfade verarbeiten, führen die Normalisierung und Kanonisierung anders durch als die nativen Windows-APIs:

  • Die abschließenden Punkte und/oder Leerzeichen werden nicht entfernt.
  • Die 8.3-Kurznamen werden nicht erweitert.
  • Die Präfixe „ \\?\ “ und „ \\?\UNC\ “ werden stets verworfen.

Diese Unterschiede eröffnen die Möglichkeit, Sicherheitsprüfungen zu umgehen, die auf Zeichenfolgenvergleichen oder Musterabgleichen basieren. Beispielsweise ergibt der folgende Code bei beiden Vergleichen „ false “, doch wenn dieser Pfad an „QFile“ übergeben wird, wird „ myapp.exe “ unter „ Program Files “ erfolgreich geöffnet.

const QString path = u"C:\\PROGRA~1\\MyApp\\myapp.exe."_s; // beachte den abschließenden Punkt
QFileInfo fi(path);
qDebug() << fi.canonicalFilePath().contains("Program Files"_L1); // false
qDebug() << (fi.suffix() == "exe"_L1); // false
QFile f(path);
f.open(QIODevice::WriteOnly); // true

Dateiberechtigungen

Dateiberechtigungen werden auf Unix-ähnlichen Systemen und unter Windows unterschiedlich gehandhabt. In einem Verzeichnis ohne Schreibzugriff ( writable ) auf Unix-ähnlichen Systemen können keine Dateien erstellt werden. Dies ist unter Windows nicht immer der Fall. Dort ist beispielsweise das Verzeichnis „Eigene Dateien“ in der Regel nicht beschreibbar, es ist jedoch dennoch möglich, darin Dateien zu erstellen.

Qts Verständnis von Dateiberechtigungen ist begrenzt, was sich insbesondere auf die Funktion ` QFile::setPermissions()` auswirkt. Unter Windows setzt Qt nur das veraltete Schreibschutz-Flag, und das auch nur, wenn keines der `Write*`-Flags übergeben wird. Qt nimmt keine Änderungen an Zugriffskontrolllisten (ACLs) vor, wodurch diese Funktion für NTFS-Volumes weitgehend nutzlos ist. Für USB-Sticks, die das VFAT-Dateisystem verwenden, kann sie dennoch von Nutzen sein. Auch POSIX-ACLs werden nicht bearbeitet.

Siehe auch QTextStream, QDataStream, QFileInfo, QDir und Das Qt-Ressourcensystem.

Dokumentation zu Mitgliedsfunktionen

QFile::QFile()

Erstellt ein QFile-Objekt.

[explicit] QFile::QFile(QObject *parent)

Erstellt ein neues Dateiobjekt mit dem angegebenen „ parent “.

[explicit] QFile::QFile(const QString &name)

Erstellt ein neues Dateiobjekt, das die Datei mit dem angegebenen Pfad „ name “ repräsentiert.

Hinweis: In Versionen bis einschließlich Qt 6.8 ist dieser Konstruktor aus Gründen der Abwärtskompatibilität implizit. Ab Qt 6.9 ist dieser Konstruktor bedingungslos „ explicit “. Benutzer können diesen Konstruktor auch in früheren Qt-Versionen zwangsweise als „ explicit “ festlegen, indem sie das Makro „ QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH “ definieren, bevor sie einen Qt-Header einbinden.

[explicit, since 6.0] QFile::QFile(const std::filesystem::path &name)

Erstellt ein neues Dateiobjekt, das die Datei mit dem angegebenen „ name “ darstellt.

Hinweis: In Versionen bis einschließlich Qt 6.8 ist dieser Konstruktor aus Gründen der Abwärtskompatibilität implizit. Ab Qt 6.9 ist dieser Konstruktor bedingungslos „ explicit “. Benutzer können diesen Konstruktor auch in früheren Qt-Versionen auf „ explicit “ festlegen, indem sie das Makro „ QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH “ definieren, bevor sie Qt-Header-Dateien einbinden.

Diese Funktion wurde in Qt 6.0 eingeführt.

QFile::QFile(const QString &name, QObject *parent)

Erstellt ein neues Dateiobjekt mit dem angegebenen „ parent “, um die Datei mit dem angegebenen „ name “ darzustellen.

[since 6.0] QFile::QFile(const std::filesystem::path &name, QObject *parent)

Erstellt ein neues Dateiobjekt mit dem angegebenen ` parent `, um die Datei mit dem angegebenen ` name` darzustellen.

Diese Funktion wurde in Qt 6.0 eingeführt.

[virtual noexcept] QFile::~QFile()

Löscht das Dateiobjekt und schließt es gegebenenfalls.

bool QFile::copy(const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)

Kopiert die Datei mit dem Namen „ fileName “ () in den Ordner „ newName “.

Diese Datei wird vor dem Kopieren geschlossen.

Seit Qt 6.12 können beim Aufruf die Berechtigungen perm angegeben werden. Werden diese nicht übergeben, werden die Berechtigungen der Originaldatei kopiert. Die neue Datei wird mit den angegebenen Berechtigungen erstellt.

Ist die kopierte Datei ein symbolischer Link (Symlink), wird die Datei kopiert, auf die er verweist, nicht der Link selbst. Mit Ausnahme der Berechtigungen werden keine weiteren Dateimetadaten kopiert.

Gibt bei Erfolg ` true ` zurück; andernfalls wird ` false` zurückgegeben.

Beachten Sie: Wenn bereits eine Datei mit dem Namen „ newName “ existiert, gibt „copy()“ „ false “ zurück. Das bedeutet, dass „ QFile “ diese Datei nicht überschreibt. Der Vorgang ist jedoch nicht atomar. Es besteht die Möglichkeit, dass ein anderer Prozess zwischen der Überprüfung und dem Kopieren eine Datei mit dem Namen „ newName “ erstellt. In diesem Fall wird die Datei überschrieben.

Hinweis: Unter Android wird dieser Vorgang für URIs des Schemas „ content “ noch nicht unterstützt.

Siehe auch setFileName().

[since 6.0] bool QFile::copy(const std::filesystem::path &newName)

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.0 eingeführt.

[static] bool QFile::copy(const QString &fileName, const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)

Kopiert die Datei mit dem Namen „ fileName “ nach „ newName “.

Seit Qt 6.12 können die Berechtigungen „ perm “ beim Aufruf angegeben werden. Werden diese nicht übergeben, werden die Berechtigungen der Originaldatei kopiert. Die neue Datei wird mit den angegebenen Berechtigungen angelegt.

Ist die kopierte Datei ein symbolischer Link (Symlink), wird die Datei kopiert, auf die er verweist, nicht der Link selbst. Mit Ausnahme der Zugriffsrechte werden keine weiteren Dateimetadaten kopiert.

Gibt bei Erfolg ` true ` zurück; andernfalls wird ` false` zurückgegeben.

Beachten Sie, dass copy(), falls bereits eine Datei mit dem Namen newName existiert, false zurückgibt. Das bedeutet, dass QFile diese Datei nicht überschreibt. Der Vorgang ist jedoch nicht atomar. Es besteht die Möglichkeit, dass ein anderer Prozess zwischen der Überprüfung und dem Kopieren eine Datei mit dem Namen newName erstellt. In diesem Fall wird die Datei überschrieben.

Hinweis: Unter Android wird dieser Vorgang für URIs nach dem Schema „ content “ noch nicht unterstützt.

Dies ist eine überladene Funktion.

Siehe auch rename().

[static] QString QFile::decodeName(const QByteArray &localFileName)

Dies führt das Gegenteil von „ QFile::encodeName()“ aus, wobei „ localFileName “ verwendet wird.

Siehe auch encodeName().

[static] QString QFile::decodeName(const char *localFileName)

Gibt die Unicode-Version des angegebenen ` localFileName` zurück. Weitere Informationen finden Sie unter ` encodeName()`.

Dies ist eine überladene Funktion.

[static] QByteArray QFile::encodeName(const QString &fileName)

Konvertiert „ fileName “ in eine 8-Bit-Kodierung, die Sie in nativen APIs verwenden können. Unter Windows entspricht die Kodierung der aktiven Windows-Codepage (ANSI). Auf anderen Plattformen ist dies UTF-8, unter macOS in zerlegter Form (NFD).

Siehe auch decodeName().

[static] bool QFile::exists(const QString &fileName)

Gibt „ true “ zurück, wenn die durch „ fileName “ angegebene Datei existiert; andernfalls wird „ false “ zurückgegeben.

Hinweis: Wenn fileName ein symbolischer Link ist, der auf eine nicht vorhandene Datei verweist, wird „false“ zurückgegeben.

bool QFile::exists() const

Gibt „ true “ zurück, wenn die durch ` fileName()` angegebene Datei existiert; andernfalls wird „ false “ zurückgegeben.

Dies ist eine überladene Funktion.

Siehe auch fileName() und setFileName().

[override virtual] QString QFile::fileName() const

Implementiert: ` QFileDevice::fileName()` const.

Gibt den Namen der Datei zurück, wie er durch ` setFileName()`, ` rename()` oder durch die Konstruktoren von ` QFile ` festgelegt wurde.

Siehe auch setFileName(), rename() und QFileInfo::fileName().

[since 6.0] std::filesystem::path QFile::filesystemFileName() const

Gibt „ fileName()“ als „ std::filesystem::path “ zurück.

Diese Funktion wurde in Qt 6.0 eingeführt.

[since 6.3] std::filesystem::path QFile::filesystemSymLinkTarget() const

Gibt „ symLinkTarget()“ als „ std::filesystem::path “ zurück.

Diese Funktion wurde in Qt 6.3 eingeführt.

[static, since 6.3] std::filesystem::path QFile::filesystemSymLinkTarget(const std::filesystem::path &fileName)

Gibt „ symLinkTarget()“ als „ std::filesystem::path “ von „ fileName “ zurück.

Diese Funktion wurde in Qt 6.3 eingeführt.

Erstellt einen Link mit dem Namen „ linkName “, der auf die Datei verweist, die derzeit durch „ fileName()“ angegeben ist. Was ein Link ist, hängt vom zugrunde liegenden Dateisystem ab (sei es eine Verknüpfung unter Windows oder ein symbolischer Link unter Unix). Gibt bei Erfolg „ true “ zurück; andernfalls wird „ false “ zurückgegeben.

Diese Funktion überschreibt keine bereits im Dateisystem vorhandene Entität; in diesem Fall gibt „ link() “ „false“ zurück und setzt „ error()“ so, dass „ RenameError “ zurückgegeben wird.

Hinweis: Um unter Windows einen gültigen Linkzu erstellen, muss „ linkName “ die Dateiendung „ .lnk “ haben.

Siehe auch ` setFileName()`.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.0 eingeführt.

Erstellt einen Link mit dem Namen „ linkName “, der auf die Datei „ fileName “ verweist. Was genau ein solcher Link ist, hängt vom zugrunde liegenden Dateisystem ab (sei es eine Verknüpfung unter Windows oder ein symbolischer Link unter Unix). Gibt bei Erfolg „ true “ zurück; andernfalls „ false “.

Dies ist eine überladene Funktion.

Siehe auch ` link()`.

bool QFile::moveToTrash()

Verschiebt die durch ` fileName()` angegebene Datei in den Papierkorb. Gibt bei Erfolg ` true ` zurück und setzt ` fileName()` auf den Pfad, unter dem die Datei im Papierkorb zu finden ist; andernfalls wird ` false` zurückgegeben.

Die Ausführungszeit dieser Funktion ist unabhängig von der Größe der in den Papierkorb verschobenen Datei. Wird diese Funktion für ein Verzeichnis aufgerufen, kann sie proportional zur Anzahl der in den Papierkorb verschobenen Dateien sein. Wenn der aktuelle fileName() auf einen symbolischen Link verweist, verschiebt diese Funktion den Link in den Papierkorb, wodurch dieser möglicherweise unbrauchbar wird – nicht jedoch das Ziel des Links.

Diese Funktion nutzt die Windows- und macOS-APIs, um das Verschieben in den Papierkorb auf diesen beiden Betriebssystemen durchzuführen. Auf anderen Systemen (Unix-Systemen) implementiert diese Funktion die FreeDesktop.org-Papierkorb-Spezifikation Version 1.0.

Hinweis: Bei Verwendung der FreeDesktop.org-Trash-Implementierung schlägt diese Funktion fehl, wenn sie die Dateien nicht durch Umbenennungen und Hardlinks in den Papierkorb verschieben kann. Diese Situation tritt ein, wenn sich die in den Papierkorb zu verschiebende Datei auf einem Volume (Einhängepunkt) befindet, auf dem der aktuelle Benutzer keine Berechtigung zum Erstellen des Verzeichnisses „ .Trash “ hat, oder bei einigen ungewöhnlichen Dateisystemtypen oder -konfigurationen (wie z. B. Untervolumes, die selbst keine Einhängepunkte sind).

Hinweis: Auf Systemen, bei denen die System-API den Speicherort der Datei im Papierkorb nicht meldet, wird ` fileName()` nach dem Verschieben der Datei auf die Leerstring gesetzt. Auf Systemen ohne Papierkorb gibt diese Funktion immer ` false ` zurück (siehe ` supportsMoveToTrash()`).

Siehe auch supportsMoveToTrash(), remove() und QDir::remove().

[static] bool QFile::moveToTrash(const QString &fileName, QString *pathInTrash = nullptr)

Verschiebt die durch ` fileName ` angegebene Datei in den Papierkorb. Gibt bei Erfolg ` true ` zurück und setzt ` pathInTrash ` (sofern angegeben) auf den Pfad, unter dem die Datei im Papierkorb zu finden ist; andernfalls wird ` false` zurückgegeben.

Die Ausführungszeit dieser Funktion ist unabhängig von der Größe der in den Papierkorb verschobenen Datei. Wird diese Funktion für ein Verzeichnis aufgerufen, kann sie proportional zur Anzahl der in den Papierkorb verschobenen Dateien sein. Wenn der aktuelle fileName() auf einen symbolischen Link verweist, verschiebt diese Funktion den Link in den Papierkorb, wodurch dieser möglicherweise unbrauchbar wird – nicht jedoch das Ziel des Links.

Diese Funktion nutzt die Windows- und macOS-APIs, um das Verschieben in den Papierkorb auf diesen beiden Betriebssystemen durchzuführen. Auf anderen Systemen (Unix-Systemen) implementiert diese Funktion die FreeDesktop.org-Papierkorb-Spezifikation Version 1.0.

Hinweis: Bei Verwendung der FreeDesktop.org-Trash-Implementierung schlägt diese Funktion fehl, wenn sie die Dateien nicht durch Umbenennungen und Hardlinks in den Papierkorb verschieben kann. Diese Situation tritt ein, wenn sich die in den Papierkorb zu verschiebende Datei auf einem Volume (Einhängepunkt) befindet, auf dem der aktuelle Benutzer keine Berechtigung zum Erstellen des Verzeichnisses „ .Trash “ hat, oder bei einigen ungewöhnlichen Dateisystemtypen oder -konfigurationen (wie z. B. Untervolumes, die selbst keine Einhängepunkte sind).

Hinweis: Auf Systemen, bei denen die System-API den Pfad der Datei im Papierkorb nicht zurückgibt, wird ` pathInTrash ` nach dem Verschieben der Datei auf die Leerstring gesetzt. Auf Systemen ohne Papierkorb gibt diese Funktion immer `false` zurück.

Dies ist eine überladene Funktion.

[override virtual] bool QFile::open(QIODeviceBase::OpenMode mode)

Implementiert: QIODevice::open(QIODeviceBase::OpenMode-Modus).

Öffnet die Datei unter Verwendung der Flags von „ mode “ und gibt bei Erfolg „ true “ zurück; andernfalls wird „ false “ zurückgegeben.

Die Flags für „ mode “ müssen „ QIODeviceBase::ReadOnly “, „ WriteOnly “ oder „ ReadWrite “ enthalten. Es können auch zusätzliche Flags verwendet werden, wie beispielsweise „ Text “ und „ Unbuffered “.

Hinweis: Im Modus „ WriteOnly “ oder „ ReadWrite “ versucht diese Funktion, eine neue Datei anzulegen, bevor sie geöffnet wird, sofern die betreffende Datei noch nicht existiert. Die Datei wird auf POSIX-Systemen mit dem Modus 0666, maskiert durch die umask, und unter Windows mit den vom übergeordneten Verzeichnis geerbten Berechtigungen angelegt. Unter Android wird erwartet, dass Zugriffsrechte auf das übergeordnete Verzeichnis des Dateinamens vorhanden sind; andernfalls ist es nicht möglich, diese noch nicht vorhandene Datei zu erstellen.

Siehe auch QT_USE_NODISCARD_FILE_OPEN und setFileName().

[since 6.3] bool QFile::open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)

Wenn die Datei nicht existiert und „ mode “ bedeutet, dass sie angelegt werden soll, wird sie mit den angegebenen Berechtigungen „ permissions “ angelegt.

Auf POSIX-Systemen werden die tatsächlichen Berechtigungen durch den Wert von ` umask` beeinflusst.

Unter Windows werden die Berechtigungen mithilfe von ACLs emuliert. Diese ACLs können in nicht-kanonischer Reihenfolge vorliegen, wenn der Gruppe weniger Berechtigungen gewährt werden als anderen. Dateien und Verzeichnisse mit solchen Berechtigungen lösen Warnungen aus, wenn die Registerkarte „Sicherheit“ des Eigenschaften-Dialogfelds geöffnet wird. Durch die Gewährung aller Berechtigungen, die anderen gewährt werden, an die Gruppe lassen sich solche Warnungen vermeiden.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.3 eingeführt.

Siehe auch „ QIODevice::OpenMode“ , „ setFileName()“ und „ QT_USE_NODISCARD_FILE_OPEN “.

bool QFile::open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)

Öffnet das vorhandene Datei-Handle „ fh “ in der angegebenen Datei „ mode “. Mit „ handleFlags “ können zusätzliche Optionen festgelegt werden. Gibt bei Erfolg „ true “ zurück; andernfalls wird „ false “ zurückgegeben.

Beispiel:

#include <stdio.h>

void printError(const char* msg)
{
    QFile file;
    file.open(stderr, QIODevice::WriteOnly);
    file.write(msg, qstrlen(msg));        // write to stderr
    file.close();
}

Wenn ein „ QFile “ mit dieser Funktion geöffnet wird, wird das Verhalten von ` close()` durch das Flag `AutoCloseHandle` gesteuert. Ist `AutoCloseHandle` angegeben und diese Funktion erfolgreich, schließt der Aufruf von ` close()` das übernommene Handle. Andernfalls schließt ` close()` die Datei nicht tatsächlich, sondern führt lediglich einen Flush durch.

Warnung:

  1. Wenn sich „ fh “ nicht auf eine reguläre Datei bezieht, z. B. wenn es sich um „ stdin “, „ stdout “ oder „ stderr “ handelt, ist der Aufruf von „ seek()“ möglicherweise nicht möglich. „ size()“ gibt in diesen Fällen „ 0 “ zurück. Weitere Informationen finden Sie unter „ QIODevice::isSequential()“.
  2. Da diese Funktion die Datei ohne Angabe eines Dateinamens öffnet, können Sie diese Funktion QFile nicht mit einem QFileInfo verwenden.

Hinweis für die Windows-Plattform

fh müssen beim Zugriff auf Dateien und andere Geräte mit wahlfreiem Zugriff im Binärmodus geöffnet werden (d. h., die Moduszeichenfolge muss ein „b“ enthalten, wie in „rb“ oder „wb“). Qt konvertiert die Zeilenendezeichen, wenn Sie QIODevice::Text an ` mode` übergeben. Sequenzielle Geräte wie `stdin` und `stdout` sind von dieser Einschränkung nicht betroffen.

Sie müssen die Unterstützung für Konsolenanwendungen aktivieren, um die Streams stdin, stdout und stderr an der Konsole nutzen zu können. Fügen Sie dazu die folgende Deklaration in die Projektdatei Ihrer Anwendung ein:

CONFIG += console

Dies ist eine überladene Funktion.

Siehe auch ` close()` und ` QT_USE_NODISCARD_FILE_OPEN`.

bool QFile::open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)

Öffnet den vorhandenen Dateideskriptor „ fd “ im angegebenen Verzeichnis „ mode “. Mit „ handleFlags “ können zusätzliche Optionen angegeben werden. Gibt bei Erfolg „ true “ zurück; andernfalls wird „ false “ zurückgegeben.

Wenn ein ` QFile ` mit dieser Funktion geöffnet wird, wird das Verhalten von ` close()` durch das Flag `AutoCloseHandle` gesteuert. Ist `AutoCloseHandle` gesetzt und diese Funktion erfolgreich, wird das übernommene Handle durch den Aufruf von ` close()` geschlossen. Andernfalls schließt ` close()` die Datei nicht tatsächlich, sondern führt lediglich einen Flush durch.

Warnung: Wenn „ fd “ keine reguläre Datei ist, d. h. wenn der Wert 0 (`stdin`), 1 (`stdout`) oder 2 (`stderr`) ist, können Sie möglicherweise ` seek()` nicht ausführen. In diesen Fällen gibt ` size()` den Wert ` 0` zurück. Weitere Informationen finden Sie unter ` QIODevice::isSequential()`.

Warnung: Da diese Funktion die Datei ohne Angabe des Dateinamens öffnet, können Sie diese QFile nicht mit einem QFileInfo verwenden.

Dies ist eine überladene Funktion.

Siehe auch close() und QT_USE_NODISCARD_FILE_OPEN.

[override virtual] QFileDevice::Permissions QFile::permissions() const

Implementiert neu: QFileDevice::permissions() const.

Siehe auch setPermissions().

[static] QFileDevice::Permissions QFile::permissions(const QString &fileName)

Gibt die vollständige, mit „OR“ verknüpfte Kombination von QFile::Permission für „ fileName “ zurück.

Dies ist eine überladene Funktion.

[static, since 6.0] QFileDevice::Permissions QFile::permissions(const std::filesystem::path &filename)

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.0 eingeführt.

bool QFile::remove()

Entfernt die durch fileName() angegebene Datei.

Gibt ` true ` zurück, wenn die Datei erfolgreich entfernt wurde; andernfalls wird ` false` zurückgegeben.

Die Datei wird vor dem Löschen geschlossen, sofern sie geöffnet war.

Siehe auch setFileName().

[static] bool QFile::remove(const QString &fileName)

Entfernt die durch den angegebenen „ fileName “ angegebene Datei.

Gibt ` true ` zurück, wenn die Datei erfolgreich entfernt wurde; andernfalls wird ` false` zurückgegeben.

Dies ist eine überladene Funktion.

Siehe auch ` remove()`.

bool QFile::rename(const QString &newName)

Benennt die derzeit durch ` fileName()` angegebene Datei in ` newName` um. Gibt bei Erfolg ` true ` zurück; andernfalls wird ` false` zurückgegeben.

Wenn bereits eine Datei mit dem Namen „ newName “ existiert, gibt „rename()“ „ false “ zurück (d. h., „ QFile “ überschreibt diese nicht).

Die Datei wird vor der Umbenennung geschlossen.

Fällt der Umbenennungsvorgang fehl, versucht Qt, den Inhalt dieser Datei nach „ newName “ zu kopieren und anschließend diese Datei zu entfernen, wobei nur „ newName “ erhalten bleibt. Fällt dieser Kopiervorgang fehl oder kann diese Datei nicht entfernt werden, wird die Zieldatei „ newName “ entfernt, um den alten Zustand wiederherzustellen.

Siehe auch setFileName().

[since 6.0] bool QFile::rename(const std::filesystem::path &newName)

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.0 eingeführt.

[static] bool QFile::rename(const QString &oldName, const QString &newName)

Benennt die Datei „ oldName “ in „ newName “ um. Gibt bei Erfolg „ true “ zurück; andernfalls „ false “.

Wenn bereits eine Datei mit dem Namen „ newName “ existiert, gibt „rename()“ „ false “ zurück (d. h., „ QFile “ überschreibt diese nicht).

Dies ist eine überladene Funktion.

Siehe auch ` rename()`.

[override virtual] bool QFile::resize(qint64 sz)

Implementiert: QFileDevice::resize(qint64 sz).

[static] bool QFile::resize(const QString &fileName, qint64 sz)

Setzt „ fileName “ auf die Größe (in Byte) „ sz “. Gibt „ true “ zurück, wenn die Größenänderung erfolgreich war; andernfalls „false“. Wenn „ sz “ größer ist als die aktuelle Größe von „ fileName “, werden die neuen Bytes auf 0 gesetzt; ist „ sz “ kleiner, wird die Datei einfach gekürzt.

Warnung: Diese Funktion kann fehlschlagen, wenn die Datei nicht existiert.

Dies ist eine überladene Funktion.

Siehe auch ` resize()`.

void QFile::setFileName(const QString &name)

Legt den Dateinamen „ name “ fest. Der Name kann ohne Pfad, als relativer Pfad oder als absoluter Pfad angegeben werden.

Rufen Sie diese Funktion nicht auf, wenn die Datei bereits geöffnet ist.

Wenn der Dateiname keinen Pfad oder einen relativen Pfad enthält, wird als Pfad das aktuelle Verzeichnis der Anwendung zum Zeitpunkt des Aufrufs von ` open()` verwendet.

Beispiel:

QFile file;
QDir::setCurrent("/tmp");
file.setFileName("readme.txt");
QDir::setCurrent("/home");
file.open(QIODevice::ReadOnly);      // opens "/home/readme.txt" under Unix

Beachten Sie, dass das Verzeichnistrennzeichen „/“ für alle von Qt unterstützten Betriebssysteme funktioniert.

Siehe auch ` fileName()`, ` QFileInfo` und ` QDir`.

[since 6.0] void QFile::setFileName(const std::filesystem::path &name)

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.0 eingeführt.

[override virtual] bool QFile::setPermissions(QFileDevice::Permissions permissions)

Implementiert: QFileDevice::setPermissions(Berechtigungen von QFileDevice::Permissions).

Legt die Berechtigungen für die Datei gemäß dem angegebenen permissions fest. Gibt bei Erfolg „ true “ zurück oder „ false “, wenn die Berechtigungen nicht geändert werden können.

Warnung: Diese Funktion nimmt keine Änderungen an ACLs vor, was ihre Wirksamkeit einschränken kann.

Siehe auch ` permissions()` und ` setFileName()`.

[static] bool QFile::setPermissions(const QString &fileName, QFileDevice::Permissions permissions)

Legt die Berechtigungen für die Datei „ fileName “ auf „ permissions “ fest.

Dies ist eine überladene Funktion.

[static, since 6.0] bool QFile::setPermissions(const std::filesystem::path &filename, QFileDevice::Permissions permissionSpec)

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.0 eingeführt.

[override virtual] qint64 QFile::size() const

Implementiert erneut: ` QFileDevice::size()` const.

[static, since 6.9] bool QFile::supportsMoveToTrash()

Gibt „ true “ zurück, wenn Qt das Verschieben von Dateien in den Papierkorb des aktuellen Betriebssystems mithilfe der Funktion „ moveToTrash()“ unterstützt, andernfalls „ false “. Beachten Sie, dass die Rückgabe von „ true “ durch diese Funktion nicht bedeutet, dass „ moveToTrash()“ erfolgreich sein wird. Insbesondere prüft diese Funktion nicht, ob der Benutzer die Funktion in seinen Einstellungen deaktiviert hat.

Diese Funktion wurde in Qt 6.9 eingeführt.

Siehe auch ` moveToTrash()`.

[static] QString QFile::symLinkTarget(const QString &fileName)

Gibt den absoluten Pfad der Datei oder des Verzeichnisses zurück, auf die bzw. das der durch ` fileName` angegebene symbolische Link (oder unter Windows die Verknüpfung) verweist, oder gibt eine leere Zeichenkette zurück, wenn ` fileName ` keinem symbolischen Link entspricht.

Dieser Name muss nicht unbedingt eine existierende Datei bezeichnen; es handelt sich lediglich um eine Zeichenkette. QFile::exists() gibt true zurück, wenn der symbolische Link auf eine existierende Datei verweist.

QString QFile::symLinkTarget() const

Gibt den absoluten Pfad der Datei oder des Verzeichnisses zurück, auf die bzw. das ein symbolischer Link (oder unter Windows eine Verknüpfung) verweist, oder eine leere Zeichenkette, wenn es sich bei dem Objekt nicht um einen symbolischen Link handelt.

Dieser Name muss nicht unbedingt eine existierende Datei bezeichnen; es handelt sich lediglich um eine Zeichenkette. ` QFile::exists()` gibt ` true ` zurück, wenn der symbolische Link auf eine existierende Datei verweist.

Dies ist eine überladene Funktion.

Siehe auch fileName() und setFileName().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.