423 if (d->fileName.isEmpty() &&
424 !
static_cast<QFSFileEngine *>(d->engine())->isUnnamedFile()) {
425 qWarning(
"QFile::remove: Empty or null file name");
430 if (error() == QFile::NoError) {
431 if (d->engine()->remove()) {
435 d->setError(QFile::RemoveError, d->fileEngine->errorString());
510 if (d->fileName.isEmpty() &&
511 !
static_cast<QFSFileEngine *>(d->engine())->isUnnamedFile()) {
512 qWarning(
"QFile::remove: Empty or null file name");
517 if (error() == QFile::NoError) {
518 QFileSystemEntry fileEntry(d->fileName);
519 QFileSystemEntry trashEntry;
521 if (QFileSystemEngine::moveFileToTrash(fileEntry, trashEntry, error)) {
522 setFileName(trashEntry.filePath());
526 d->setError(QFile::RenameError, error.toString());
576QFile::rename(
const QString &newName)
581 if (fileName().isEmpty()) {
582 qWarning(
"QFile::rename: Empty or null file name");
585 if (d->fileName == newName) {
586 d->setError(QFile::RenameError, tr(
"Destination file is the same file."));
590 d->setError(QFile::RenameError, tr(
"Source file does not exist."));
597 bool changingCase =
false;
598 QByteArray targetId = QFileSystemEngine::id(QFileSystemEntry(newName));
599 if (!targetId.isNull()) {
600 QByteArray fileId = d->fileEngine ?
601 d->fileEngine->id() :
602 QFileSystemEngine::id(QFileSystemEntry(d->fileName));
603 changingCase = (fileId == targetId && d->fileName.compare(newName, Qt::CaseInsensitive) == 0);
605 d->setError(QFile::RenameError, tr(
"Destination file exists"));
609#if defined(Q_OS_LINUX) && QT_CONFIG(temporaryfile)
612 QTemporaryFileName tfn(d->fileName);
613 QFileSystemEntry src(d->fileName);
615 for (
int attempt = 0; attempt < 16; ++attempt) {
616 QFileSystemEntry tmp(tfn.generateNext(), QFileSystemEntry::FromNativePath());
619 if (!QFileSystemEngine::renameFile(src, tmp, error))
623 if (QFileSystemEngine::renameFile(tmp, QFileSystemEntry(newName), error)) {
624 d->fileEngine->setFileName(newName);
625 d->fileName = newName;
631 if (QFileSystemEngine::renameFile(tmp, src, error2))
635 d->setError(QFile::RenameError,
636 tr(
"Error while renaming: %1").arg(error.toString())
638 + tr(
"Unable to restore from %1: %2").
639 arg(QDir::toNativeSeparators(tmp.filePath()), error2.toString()));
642 d->setError(QFile::RenameError,
643 tr(
"Error while renaming: %1").arg(error.toString()));
649 if (error() == QFile::NoError) {
650 if (changingCase ? d->engine()->renameOverwrite(newName) : d->engine()->rename(newName)) {
653 d->fileEngine->setFileName(newName);
654 d->fileName = newName;
661 d->setError(QFile::RenameError, d->fileEngine->errorString());
665 if (isSequential()) {
666 d->setError(QFile::RenameError, tr(
"Will not rename sequential file using block copy"));
670#if QT_CONFIG(temporaryfile)
672 if (d->copy(newName)) {
675 d->setError(QFile::RenameError, tr(
"Cannot remove source file: %1").arg(errorString()));
678 out.setPermissions(ReadUser | WriteUser);
682 d->fileEngine->setFileName(newName);
684 setFileName(newName);
688 d->setError(QFile::RenameError, errorString());
692 d->setError(QFile::RenameError, d->fileEngine->errorString());
787 setError(QFile::CopyError, QFile::tr(
"Cannot open for output: %1").arg(out.errorString()));
904bool QFile::open(OpenMode mode)
908 return file_already_open(*
this);
910 if (mode & (Append | NewOnly))
913 if ((mode & (ReadOnly | WriteOnly)) == 0) {
914 qWarning(
"QIODevice::open: File access not specified");
919 if (d->engine()->open(mode | QIODevice::Unbuffered)) {
920 QIODevice::open(mode);
925 QFile::FileError err = d->fileEngine->error();
926 if (err == QFile::UnspecifiedError)
927 err = QFile::OpenError;
928 d->setError(err, d->fileEngine->errorString());
1019bool QFile::open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags)
1023 return file_already_open(*
this);
1025 if (mode & (Append | NewOnly))
1028 if ((mode & (ReadOnly | WriteOnly)) == 0) {
1029 qWarning(
"QFile::open: File access not specified");
1034 if (d->openExternalFile(mode | Unbuffered, fh, handleFlags)) {
1035 QIODevice::open(mode);
1036 if (!(mode & Append) && !isSequential()) {
1037 qint64 pos = (qint64)QT_FTELL(fh);
1040 QIODevice::seek(pos);
1071bool QFile::open(
int fd, OpenMode mode, FileHandleFlags handleFlags)
1075 return file_already_open(*
this);
1077 if (mode & (Append | NewOnly))
1080 if ((mode & (ReadOnly | WriteOnly)) == 0) {
1081 qWarning(
"QFile::open: File access not specified");
1086 if (d->openExternalFile(mode | Unbuffered, fd, handleFlags)) {
1087 QIODevice::open(mode);
1088 if (!(mode & Append) && !isSequential()) {
1089 qint64 pos = (qint64)QT_LSEEK(fd, QT_OFF_T(0), SEEK_CUR);
1092 QIODevice::seek(pos);