424 if (d->fileName.isEmpty() &&
425 !
static_cast<QFSFileEngine *>(d->engine())->isUnnamedFile()) {
426 qWarning(
"QFile::remove: Empty or null file name");
431 if (error() == QFile::NoError) {
432 if (d->engine()->remove()) {
436 d->setError(QFile::RemoveError, d->fileEngine->errorString());
511 if (d->fileName.isEmpty() &&
512 !
static_cast<QFSFileEngine *>(d->engine())->isUnnamedFile()) {
513 qWarning(
"QFile::remove: Empty or null file name");
518 if (error() == QFile::NoError) {
519 QFileSystemEntry fileEntry(d->fileName);
520 QFileSystemEntry trashEntry;
522 if (QFileSystemEngine::moveFileToTrash(fileEntry, trashEntry, error)) {
523 setFileName(trashEntry.filePath());
527 d->setError(QFile::RenameError, error.toString());
577QFile::rename(
const QString &newName)
582 if (fileName().isEmpty()) {
583 qWarning(
"QFile::rename: Empty or null file name");
586 if (d->fileName == newName) {
587 d->setError(QFile::RenameError, tr(
"Destination file is the same file."));
591 d->setError(QFile::RenameError, tr(
"Source file does not exist."));
598 bool changingCase =
false;
599 QByteArray targetId = QFileSystemEngine::id(QFileSystemEntry(newName));
600 if (!targetId.isNull()) {
601 QByteArray fileId = d->fileEngine ?
602 d->fileEngine->id() :
603 QFileSystemEngine::id(QFileSystemEntry(d->fileName));
604 changingCase = (fileId == targetId && d->fileName.compare(newName, Qt::CaseInsensitive) == 0);
606 d->setError(QFile::RenameError, tr(
"Destination file exists"));
610#if defined(Q_OS_LINUX) && QT_CONFIG(temporaryfile)
613 QTemporaryFileName tfn(d->fileName);
614 QFileSystemEntry src(d->fileName);
616 for (
int attempt = 0; attempt < 16; ++attempt) {
617 QFileSystemEntry tmp(tfn.generateNext(), QFileSystemEntry::FromNativePath());
620 if (!QFileSystemEngine::renameFile(src, tmp, error))
624 if (QFileSystemEngine::renameFile(tmp, QFileSystemEntry(newName), error)) {
625 d->fileEngine->setFileName(newName);
626 d->fileName = newName;
632 if (QFileSystemEngine::renameFile(tmp, src, error2))
636 d->setError(QFile::RenameError,
637 tr(
"Error while renaming: %1").arg(error.toString())
639 + tr(
"Unable to restore from %1: %2").
640 arg(QDir::toNativeSeparators(tmp.filePath()), error2.toString()));
643 d->setError(QFile::RenameError,
644 tr(
"Error while renaming: %1").arg(error.toString()));
650 if (error() == QFile::NoError) {
651 if (changingCase ? d->engine()->renameOverwrite(newName) : d->engine()->rename(newName)) {
654 d->fileEngine->setFileName(newName);
655 d->fileName = newName;
662 d->setError(QFile::RenameError, d->fileEngine->errorString());
666 if (isSequential()) {
667 d->setError(QFile::RenameError, tr(
"Will not rename sequential file using block copy"));
671#if QT_CONFIG(temporaryfile)
673 if (d->copy(newName)) {
676 d->setError(QFile::RenameError, tr(
"Cannot remove source file: %1").arg(errorString()));
679 out.setPermissions(ReadUser | WriteUser);
683 d->fileEngine->setFileName(newName);
685 setFileName(newName);
689 d->setError(QFile::RenameError, errorString());
693 d->setError(QFile::RenameError, d->fileEngine->errorString());
788 setError(QFile::CopyError, QFile::tr(
"Cannot open for output: %1").arg(out.errorString()));
905bool QFile::open(OpenMode mode)
909 return file_already_open(*
this);
911 if (mode & (Append | NewOnly))
914 if ((mode & (ReadOnly | WriteOnly)) == 0) {
915 qWarning(
"QIODevice::open: File access not specified");
920 if (d->engine()->open(mode | QIODevice::Unbuffered)) {
921 QIODevice::open(mode);
926 QFile::FileError err = d->fileEngine->error();
927 if (err == QFile::UnspecifiedError)
928 err = QFile::OpenError;
929 d->setError(err, d->fileEngine->errorString());
1020bool QFile::open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags)
1024 return file_already_open(*
this);
1026 if (mode & (Append | NewOnly))
1029 if ((mode & (ReadOnly | WriteOnly)) == 0) {
1030 qWarning(
"QFile::open: File access not specified");
1035 if (d->openExternalFile(mode | Unbuffered, fh, handleFlags)) {
1036 QIODevice::open(mode);
1037 if (!(mode & Append) && !isSequential()) {
1038 qint64 pos = (qint64)QT_FTELL(fh);
1041 QIODevice::seek(pos);
1072bool QFile::open(
int fd, OpenMode mode, FileHandleFlags handleFlags)
1076 return file_already_open(*
this);
1078 if (mode & (Append | NewOnly))
1081 if ((mode & (ReadOnly | WriteOnly)) == 0) {
1082 qWarning(
"QFile::open: File access not specified");
1087 if (d->openExternalFile(mode | Unbuffered, fd, handleFlags)) {
1088 QIODevice::open(mode);
1089 if (!(mode & Append) && !isSequential()) {
1090 qint64 pos = (qint64)QT_LSEEK(fd, QT_OFF_T(0), SEEK_CUR);
1093 QIODevice::seek(pos);