QFile Class
Die Klasse QFile bietet eine Schnittstelle zum Lesen von und Schreiben in Dateien. Mehr...
Kopfzeile: | #include <QFile> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Vererbt: | QFileDevice |
Vererbt von: |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QFile ist Teil von Input/Output und Networking.
Hinweis: Alle Funktionen in 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) |
(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 |
Reimplementierte ö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) |
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) |
QString | symLinkTarget(const QString &fileName) |
Detaillierte Beschreibung
QFile ist ein E/A-Gerät zum Lesen und Schreiben von Text- und Binärdateien und Ressourcen. Ein QFile kann alleine oder, was noch bequemer ist, mit einem QTextStream oder QDataStream verwendet werden.
Der Dateiname wird normalerweise im Konstruktor übergeben, kann aber jederzeit mit setFileName() gesetzt werden. QFile erwartet, dass das Dateitrennzeichen '/' ist, unabhängig vom Betriebssystem. Die Verwendung von anderen Trennzeichen (z.B. '\') wird nicht unterstützt.
Sie können die Existenz einer Datei mit exists() überprüfen und eine Datei mit remove() entfernen. (Weitere fortgeschrittene dateisystembezogene Operationen werden von QFileInfo und QDir bereitgestellt).
Die Datei wird mit open() geöffnet, mit close() geschlossen und mit flush() geleert. Daten werden normalerweise mit QDataStream oder QTextStream gelesen und geschrieben, aber Sie können auch die QIODevice-vererbten Funktionen read(), readLine(), readAll(), write() aufrufen. QFile erbt auch getChar(), putChar() und ungetChar(), die ein Zeichen nach dem anderen verarbeiten.
Die Größe der Datei wird von size() zurückgegeben. Sie können die aktuelle Dateiposition mit pos() ermitteln oder mit seek() zu einer neuen Dateiposition wechseln. Wenn Sie das Ende der Datei erreicht haben, gibt atEnd() true
zurück.
Direktes Lesen von Dateien
Das folgende Beispiel liest eine Textdatei Zeile für Zeile:
QFile file("in.txt"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; while (!file.atEnd()) { QByteArray line = file.readLine(); process_line(line); }
Das Text Flag, das an open() übergeben wird, weist Qt an, die Windows-artigen Zeilenabschlüsse ("\r\n") in C++-artige Abschlüsse ("\n") umzuwandeln. Standardmäßig geht QFile von einer Binärdatei aus, d.h. es führt keine Konvertierung an den in der Datei gespeicherten Bytes durch.
Verwendung von Streams zum Lesen von Dateien
Das nächste Beispiel verwendet QTextStream, um eine Textdatei Zeile für Zeile 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 Das Programm QString wandelt die auf der Festplatte gespeicherten 8-Bit-Daten in 16-Bit-Unicode um. Standardmäßig wird davon ausgegangen, dass die Datei in UTF-8 kodiert ist. Dies kann mit QTextStream::setEncoding() geändert werden.
Um Text zu schreiben, können wir den Operator<<() verwenden, der überladen ist und auf der linken Seite ein QTextStream und auf der rechten Seite verschiedene Datentypen (einschließlich QString) annehmen kann:
QFile file("out.txt"); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream out(&file); out << "The magic number is: " << 49 << "\n";
QDataStream ist insofern ähnlich, als dass man mit operator<<() Daten schreiben und mit operator>>() zurücklesen kann. Siehe die Klassendokumentation für Details.
Signale
Im Gegensatz zu anderen QIODevice -Implementierungen, wie z.B. QTcpSocket, sendet QFile nicht die Signale aboutToClose(), bytesWritten() oder readyRead(). Dieses Implementierungsdetail bedeutet, dass QFile nicht für das Lesen und Schreiben bestimmter Dateitypen geeignet ist, wie z. B. Gerätedateien auf Unix-Plattformen.
Plattformspezifische Probleme
Qt-APIs im Zusammenhang mit I/O verwenden UTF-16-basierte QStrings zur Darstellung von Dateipfaden. Standard C++ APIs (<cstdio>
oder <iostream>
) oder plattformspezifische APIs benötigen jedoch oft einen 8-bit kodierten Pfad. Sie können encodeName() und decodeName() verwenden, um zwischen beiden Darstellungen zu konvertieren.
Unter Unix gibt es einige spezielle Systemdateien (z. B. in /proc
), für die size() immer 0 zurückgibt. Dennoch können Sie möglicherweise weitere Daten aus einer solchen Datei lesen; die Daten werden als direkte Reaktion auf Ihren Aufruf von read() erzeugt. In diesem Fall können Sie jedoch nicht atEnd() verwenden, um festzustellen, ob es noch mehr Daten zu lesen gibt (da atEnd() für eine Datei, die angeblich die Größe 0 hat, true zurückgibt). Stattdessen sollten Sie entweder readAll() oder read() oder readLine() so oft aufrufen, bis keine Daten mehr gelesen werden können. Das nächste Beispiel verwendet QTextStream, um /proc/modules
Zeile für Zeile 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(); }
Dateiberechtigungen werden auf Unix-ähnlichen Systemen und Windows unterschiedlich gehandhabt. In einem Verzeichnis ohne writable können auf Unix-ähnlichen Systemen keine Dateien erstellt werden. Dies ist unter Windows nicht immer der Fall, wo z.B. das Verzeichnis "Eigene Dateien" normalerweise nicht beschreibbar ist, aber es ist trotzdem möglich, Dateien darin zu erstellen.
Das Verständnis von Qt für Dateiberechtigungen ist begrenzt, was insbesondere die Funktion QFile::setPermissions() betrifft. Unter Windows setzt Qt nur das alte Nur-Lesen-Flag, und das auch nur, wenn keines der Write*-Flags übergeben wird. Qt manipuliert keine Zugriffskontrolllisten (ACLs), was diese Funktion für NTFS-Volumes weitgehend nutzlos macht. Für USB-Sticks, die VFAT-Dateisysteme verwenden, kann sie dennoch von Nutzen sein. POSIX ACLs werden ebenfalls nicht manipuliert.
Unter Android gelten einige Einschränkungen beim Umgang mit Inhalts-URIs:
- Zugriffsberechtigungen können erforderlich sein, wenn der Benutzer über die QFileDialog aufgefordert wird, die den nativen Dateipicker von Android implementiert.
- Achten Sie auf die Einhaltung der Scoped-Storage-Richtlinien, z. B. die Verwendung app-spezifischer Verzeichnisse anstelle anderer öffentlicher externer Verzeichnisse. Weitere Informationen finden Sie auch unter Best Practices für die Speicherung.
- Aufgrund des Designs der Qt-APIs (z. B. QFile) ist es nicht möglich, die letzteren APIs vollständig in die MediaStore-APIs von Android zu integrieren.
Siehe auch QTextStream, QDataStream, QFileInfo, QDir, und Das Qt Resource System.
Dokumentation der Mitgliedsfunktionen
QFile::QFile()
Konstruiert ein QFile-Objekt.
[explicit]
QFile::QFile(QObject *parent)
Konstruiert ein neues Dateiobjekt mit der angegebenen parent.
QFile::QFile(const QString &name)
Konstruiert ein neues File-Objekt, um die Datei mit der angegebenen name zu repräsentieren.
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 Versionen von Qt zu explicit
machen, indem sie das Makro QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH
definieren, bevor sie einen Qt-Header einfügen.
[since 6.0]
QFile::QFile(const std::filesystem::path &name)
Konstruiert ein neues File-Objekt, um die Datei mit der angegebenen name zu repräsentieren.
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 Versionen von Qt zu explicit
machen, indem sie das Makro QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH
definieren, bevor sie einen Qt-Header einfügen.
Diese Funktion wurde in Qt 6.0 eingeführt.
QFile::QFile(const QString &name, QObject *parent)
Konstruiert ein neues Dateiobjekt mit dem angegebenen parent, um die Datei mit dem angegebenen name zu repräsentieren.
[since 6.0]
QFile::QFile(const std::filesystem::path &name, QObject *parent)
Konstruiert ein neues Dateiobjekt mit der angegebenen parent, um die Datei mit der angegebenen name zu repräsentieren.
Diese Funktion wurde in Qt 6.0 eingeführt.
[virtual noexcept]
QFile::~QFile()
Zerstört das Dateiobjekt und schließt es, falls erforderlich.
bool QFile::copy(const QString &newName)
Kopiert die Datei mit dem Namen fileName() nach newName.
Diese Datei wird geschlossen, bevor sie kopiert wird.
Handelt es sich bei der kopierten Datei um einen symbolischen Link (Symlink), wird die Datei kopiert, auf die er verweist, nicht der Link selbst. Mit Ausnahme der Berechtigungen, die kopiert werden, werden keine anderen Metadaten der Datei kopiert.
Gibt bei Erfolg true
zurück, andernfalls false
.
Beachten Sie, dass copy() false
zurückgibt, wenn eine Datei mit dem Namen newName bereits existiert. Das bedeutet, dass QFile nicht überschrieben wird.
Hinweis: Unter Android wird dieser Vorgang noch nicht für content
Schema-URIs 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)
Dies ist eine überladene Funktion.
Kopiert die Datei mit dem Namen fileName nach newName.
Diese Datei wird geschlossen, bevor sie kopiert wird.
Wenn die kopierte Datei ein symbolischer Link (Symlink) ist, wird die Datei kopiert, auf die er verweist, nicht der Link selbst. Mit Ausnahme der Berechtigungen, die kopiert werden, werden keine anderen Metadaten der Datei kopiert.
Gibt bei Erfolg true
zurück, andernfalls false
.
Beachten Sie, dass copy() false
zurückgibt, wenn eine Datei mit dem Namen newName bereits existiert. Das bedeutet, dass QFile nicht überschrieben wird.
Hinweis: Unter Android wird dieser Vorgang noch nicht für content
Schema-URIs unterstützt.
Siehe auch rename().
[static]
QString QFile::decodeName(const QByteArray &localFileName)
Dies macht die Umkehrung von QFile::encodeName() mit localFileName.
Siehe auch encodeName().
[static]
QString QFile::decodeName(const char *localFileName)
Dies ist eine überladene Funktion.
Gibt die Unicode-Version des angegebenen localFileName zurück. Siehe encodeName() für Details.
[static]
QByteArray QFile::encodeName(const QString &fileName)
Konvertiert fileName in eine 8-Bit-Kodierung, die Sie in nativen APIs verwenden können. Unter Windows ist die Kodierung diejenige der aktiven Windows-Codepage (ANSI). Auf anderen Plattformen ist dies UTF-8, für macOS in dekomponierter 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 Symlink ist, der auf eine nicht existierende Datei zeigt, wird false zurückgegeben.
bool QFile::exists() const
Dies ist eine überladene Funktion.
Gibt true
zurück, wenn die durch fileName() angegebene Datei existiert; andernfalls gibt sie false
zurück.
Siehe auch fileName() und setFileName().
[override virtual]
QString QFile::fileName() const
Reimplements: QFileDevice::fileName() const.
Gibt den Namen zurück, der durch setFileName() oder die QFile Konstruktoren gesetzt wurde.
Siehe auch setFileName() 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.
bool QFile::link(const QString &linkName)
Erzeugt einen Link mit dem Namen linkName, der auf die Datei verweist, die gerade durch fileName() angegeben wird. 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 false
.
Diese Funktion überschreibt keine bereits vorhandene Entität im Dateisystem; in diesem Fall gibt link()
false zurück und setzt error() auf RenameError.
Hinweis: Um eine gültige Verknüpfung unter Windows zu erstellen, muss linkName eine .lnk
Dateierweiterung haben.
Siehe auch setFileName().
[since 6.0]
bool QFile::link(const std::filesystem::path &newName)
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.0 eingeführt.
[static]
bool QFile::link(const QString &fileName, const QString &linkName)
Dies ist eine überladene Funktion.
Erzeugt einen Link mit dem Namen linkName, der auf die Datei fileName zeigt. 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 false
.
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 Zeit für die Ausführung dieser Funktion ist unabhängig von der Größe der zu löschenden Datei. Wenn diese Funktion für ein Verzeichnis aufgerufen wird, kann sie proportional zur Anzahl der zu löschenden Dateien sein. Wenn die aktuelle fileName() auf einen symbolischen Link zeigt, wird diese Funktion den Link in den Papierkorb verschieben und ihn möglicherweise zerstören, nicht das Ziel des Links.
Diese Funktion verwendet die Windows- und macOS-APIs, um den Löschvorgang auf diesen beiden Betriebssystemen durchzuführen. Auf anderen Systemen (Unix-Systemen) implementiert diese Funktion die FreeDesktop.org Trash-Spezifikation Version 1.0.
Hinweis: Bei der Verwendung der FreeDesktop.org Trash-Implementierung schlägt diese Funktion fehl, wenn sie nicht in der Lage ist, die Dateien mit Hilfe von Dateiumbenennungen und Hardlinks an den Speicherort im Papierkorb zu verschieben. Dies ist der Fall, wenn sich die zu löschende 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 (z. B. Subvolumes, die selbst keine Einhängepunkte sind).
Hinweis: Auf Systemen, auf denen die System-API den Speicherort der Datei im Papierkorb nicht meldet, wird fileName() auf die Zeichenfolge null gesetzt, sobald die Datei verschoben wurde. Auf Systemen, die keinen Mülleimer haben, gibt diese Funktion immer false zurück.
[static]
bool QFile::moveToTrash(const QString &fileName, QString *pathInTrash = nullptr)
Dies ist eine überladene Funktion.
Verschiebt die durch fileName angegebene Datei in den Papierkorb. Gibt bei Erfolg true
zurück und setzt pathInTrash (falls angegeben) auf den Pfad, unter dem die Datei im Papierkorb gefunden werden kann; andernfalls gibt sie false
zurück.
Die Zeit für die Ausführung dieser Funktion ist unabhängig von der Größe der zu löschenden Datei. Wenn diese Funktion für ein Verzeichnis aufgerufen wird, kann sie proportional zur Anzahl der zu löschenden Dateien sein. Wenn die aktuelle fileName() auf einen symbolischen Link zeigt, wird diese Funktion den Link in den Papierkorb verschieben und ihn möglicherweise zerstören, nicht das Ziel des Links.
Diese Funktion verwendet die Windows- und macOS-APIs, um den Löschvorgang auf diesen beiden Betriebssystemen durchzuführen. In anderen Fällen (Unix-Systeme) implementiert diese Funktion die FreeDesktop.org Trash-Spezifikation Version 1.0.
Hinweis: Bei der Verwendung der FreeDesktop.org Trash-Implementierung schlägt diese Funktion fehl, wenn sie nicht in der Lage ist, die Dateien mit Hilfe von Dateiumbenennungen und Hardlinks an den Speicherort im Papierkorb zu verschieben. Dies ist der Fall, wenn sich die zu löschende 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 (z. B. Subvolumes, die selbst keine Einhängepunkte sind).
Hinweis: Auf Systemen, auf denen die System-API den Pfad der Datei im Papierkorb nicht meldet, wird pathInTrash auf die Zeichenfolge null gesetzt, sobald die Datei verschoben wurde. Auf Systemen, die keinen Mülleimer haben, gibt diese Funktion immer false zurück.
[override virtual]
bool QFile::open(QIODeviceBase::OpenMode mode)
Reimplements: QIODevice::open(QIODeviceBase::OpenMode mode).
Öffnet die Datei mit den Flags mode und gibt bei Erfolg true
zurück, andernfalls false
.
Die Flags für mode müssen QIODeviceBase::ReadOnly, WriteOnly oder ReadWrite enthalten. Sie können auch zusätzliche Flags wie Text und Unbuffered enthalten.
Hinweis: Wenn die betreffende Datei im Modus WriteOnly oder ReadWrite noch nicht existiert, versucht diese Funktion, eine neue Datei zu erstellen, bevor sie geöffnet wird. Die Datei wird mit dem Modus 0666 erstellt, der auf POSIX-Systemen durch die umask maskiert wird, und mit den vom übergeordneten Verzeichnis geerbten Berechtigungen auf Windows. Unter Android wird erwartet, dass Sie Zugriffsrechte auf das übergeordnete Verzeichnis des Dateinamens haben, andernfalls ist es nicht möglich, diese nicht existierende Datei zu erstellen.
Siehe auch QT_USE_NODISCARD_FILE_OPEN und setFileName().
[since 6.3]
bool QFile::open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)
Dies ist eine überladene Funktion.
Wenn die Datei nicht existiert und mode ihre Erstellung impliziert, wird sie mit dem angegebenen permissions erstellt.
Auf POSIX-Systemen werden die tatsächlichen Berechtigungen durch den Wert von umask
beeinflusst.
Unter Windows werden die Berechtigungen durch ACLs emuliert. Diese ACLs können in nicht-kanonischer Reihenfolge sein, wenn der Gruppe weniger Rechte als anderen gewährt werden. Dateien und Verzeichnisse mit solchen Berechtigungen erzeugen Warnungen, wenn die Registerkarte Sicherheit im Dialogfeld Eigenschaften geöffnet wird. Wenn Sie der Gruppe alle Rechte gewähren, die anderen gewährt werden, werden solche Warnungen vermieden.
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)
Dies ist eine überladene Funktion.
Öffnet das vorhandene Dateihandle fh in der angegebenen mode. handleFlags kann verwendet werden, um zusätzliche Optionen anzugeben. Gibt bei Erfolg true
zurück, andernfalls false
.
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 AutoCloseHandle-Flag gesteuert. Wenn AutoCloseHandle angegeben ist und diese Funktion erfolgreich ist, dann schließt der Aufruf von close() das übernommene Handle. Andernfalls schließt close() die Datei nicht wirklich, sondern leert sie nur.
Warnung:
- Wenn fh nicht auf eine reguläre Datei verweist, z. B.
stdin
,stdout
oderstderr
, können Sie seek() möglicherweise nicht verwenden. size() gibt in diesen Fällen0
zurück. Siehe QIODevice::isSequential() für weitere Informationen. - Da diese Funktion die Datei ohne Angabe des Dateinamens öffnet, können Sie diese QFile nicht mit einer QFileInfo verwenden.
Hinweis für die Windows-Plattform
fh muss im Binärmodus geöffnet werden (d.h. der Modus-String muss 'b' enthalten, wie in "rb" oder "wb"), wenn auf Dateien und andere Random-Access-Geräte zugegriffen wird. Qt übersetzt die Zeilenende-Zeichen, wenn Sie QIODevice::Text an mode übergeben. Sequentielle 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 verwenden zu können. Fügen Sie dazu die folgende Erklärung in die Projektdatei Ihrer Anwendung ein:
CONFIG += console
Siehe auch close() und QT_USE_NODISCARD_FILE_OPEN.
bool QFile::open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
Dies ist eine überladene Funktion.
Öffnet den vorhandenen Dateideskriptor fd in der angegebenen mode. handleFlags kann verwendet werden, um zusätzliche Optionen anzugeben. Gibt bei Erfolg true
zurück, andernfalls false
.
Wenn ein QFile mit dieser Funktion geöffnet wird, wird das Verhalten von close() durch das AutoCloseHandle-Flag gesteuert. Wenn AutoCloseHandle angegeben ist und diese Funktion erfolgreich ist, dann schließt der Aufruf von close() das übernommene Handle. Andernfalls schließt close() die Datei nicht wirklich, sondern leert sie nur.
Warnung: Wenn fd keine reguläre Datei ist, z. B. 0 (stdin
), 1 (stdout
) oder 2 (stderr
), können Sie möglicherweise seek() nicht aufrufen. In diesen Fällen gibt size() 0
zurück. Siehe QIODevice::isSequential() für weitere Informationen.
Warnung: Da diese Funktion die Datei ohne Angabe des Dateinamens öffnet, können Sie diese QFile nicht mit einer QFileInfo verwenden.
Siehe auch close() und QT_USE_NODISCARD_FILE_OPEN.
[override virtual]
QFileDevice::Permissions QFile::permissions() const
Reimplements: QFileDevice::permissions() const.
Siehe auch setPermissions().
[static]
QFileDevice::Permissions QFile::permissions(const QString &fileName)
Dies ist eine überladene Funktion.
Gibt die komplette ODER-verknüpfte Kombination von QFile::Permission für fileName zurück.
[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 bei Erfolg true
zurück, andernfalls false
.
Die Datei wird geschlossen, bevor sie entfernt wird.
Siehe auch setFileName().
[static]
bool QFile::remove(const QString &fileName)
Dies ist eine überladene Funktion.
Entfernt die durch die angegebene fileName spezifizierte Datei.
Gibt bei Erfolg true
zurück, andernfalls false
.
Siehe auch remove().
bool QFile::rename(const QString &newName)
Benennt die aktuell durch fileName() angegebene Datei in newName um. Bei Erfolg wird true
zurückgegeben, andernfalls false
.
Wenn eine Datei mit dem Namen newName bereits existiert, gibt rename() false
zurück (d.h. QFile wird nicht überschrieben).
Die Datei wird geschlossen, bevor sie umbenannt wird.
Wenn der Umbenennungsvorgang fehlschlägt, versucht Qt, den Inhalt dieser Datei nach newName zu kopieren und diese Datei dann zu entfernen, wobei nur newName erhalten bleibt. Wenn dieser Kopiervorgang fehlschlägt oder diese Datei nicht entfernt werden kann, 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)
Dies ist eine überladene Funktion.
Benennt die Datei oldName in newName um. Gibt bei Erfolg true
zurück, andernfalls false
.
Wenn eine Datei mit dem Namen newName bereits existiert, gibt rename() false
zurück (d.h. QFile überschreibt sie nicht).
Siehe auch rename().
[override virtual]
bool QFile::resize(qint64 sz)
Reimplements: QFileDevice::resize(qint64 sz).
[static]
bool QFile::resize(const QString &fileName, qint64 sz)
Dies ist eine überladene Funktion.
Setzt fileName auf die Größe (in Bytes) sz. Gibt true
zurück, wenn die Größenänderung erfolgreich war; andernfalls false. Wenn sz größer ist als fileName, werden die neuen Bytes auf 0 gesetzt, wenn sz kleiner ist, wird die Datei einfach abgeschnitten.
Warnung: Diese Funktion kann fehlschlagen, wenn die Datei nicht existiert.
Siehe auch resize().
void QFile::setFileName(const QString &name)
Legt die name der Datei fest. Der Name kann keinen Pfad, einen relativen Pfad oder einen absoluten Pfad haben.
Rufen Sie diese Funktion nicht auf, wenn die Datei bereits geöffnet wurde.
Wenn der Dateiname keinen Pfad oder einen relativen Pfad enthält, wird der Pfad verwendet, der zum Zeitpunkt des Aufrufs von open ( ) der aktuelle Verzeichnispfad der Anwendung ist.
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 Verzeichnis-Trennzeichen "/" 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)
Reimplements: QFileDevice::setPermissions(QFileDevice::Permissions permissions).
Setzt die Berechtigungen für die Datei auf den angegebenen permissions. Gibt true
zurück, wenn erfolgreich, oder false
, wenn die Berechtigungen nicht geändert werden können.
Warnung: Diese Funktion manipuliert keine ACLs, was ihre Wirksamkeit einschränken kann.
Siehe auch permissions() und setFileName().
[static]
bool QFile::setPermissions(const QString &fileName, QFileDevice::Permissions permissions)
Dies ist eine überladene Funktion.
Setzt die Berechtigungen für die Datei fileName auf permissions.
[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
Reimplements: QFileDevice::size() const.
[static]
QString QFile::symLinkTarget(const QString &fileName)
Gibt den absoluten Pfad der Datei oder des Verzeichnisses zurück, auf das der von fileName angegebene symbolische Link (oder die Verknüpfung unter Windows) verweist, oder gibt eine leere Zeichenfolge zurück, wenn fileName keinem symbolischen Link entspricht.
Dieser Name darf keine existierende Datei darstellen; er ist nur eine Zeichenkette. QFile::exists() gibt true
zurück, wenn der Symlink auf eine existierende Datei verweist.
QString QFile::symLinkTarget() const
Dies ist eine überladene Funktion.
Gibt den absoluten Pfad der Datei oder des Verzeichnisses zurück, auf die ein Symlink (oder eine Verknüpfung unter Windows) zeigt, oder eine leere Zeichenkette, wenn das Objekt kein symbolischer Link ist.
Dieser Name darf keine existierende Datei darstellen; er ist nur eine Zeichenkette. QFile::exists() gibt true
zurück, wenn der Symlink auf eine existierende Datei zeigt.
Siehe auch fileName() und setFileName().
© 2025 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.