40 #include "qplatformdefs.h"
45 #ifndef QT_NO_DEBUG_STREAM
51 #if QT_CONFIG(regularexpression)
60 #ifdef QT_BUILD_CORE_LIB
62 # include "private/qcoreglobaldata_p.h"
76 char c =
path.at(0).toLatin1();
79 if (
path.at(1).toLatin1() !=
':')
81 return path.mid(0, 2);
94 static int rootLength(
const QString &
name,
bool allowUncPaths)
101 return nextSlash >= 0 ? nextSlash + 1 :
len;
103 #if defined(Q_OS_WIN)
117 , fileListsInitialized(
false)
118 , nameFilters(nameFilters_)
140 , fileListsInitialized(
false)
141 , nameFilters(copy.nameFilters)
144 , dirEntry(copy.dirEntry)
145 , metaData(copy.metaData)
156 const QAbstractFileEngine::FileFlags
info =
182 ret.append(
e.trimmed().toString());
191 #
if defined(Q_OS_WIN)
192 && (!(
p.length() == 3 &&
p.at(1).unicode() ==
':' &&
p.at(0).isLetter()))
195 p.truncate(
p.length() - 1);
243 QDir::SortFlags qt_cmp_si_sort_flags;
261 | (qt_cmp_si_sort_flags &
QDir::Type)).toInt();
275 r = firstModified.
msecsTo(secondModified);
331 for (
int i = 0;
i <
n; ++
i)
332 names->append(
l.at(
i).fileName());
336 for (
int i = 0;
i <
n; ++
i)
341 for (
int i = 0;
i <
n; ++
i)
345 for (
int i = 0;
i <
n; ++
i)
346 names->append(si[
i].item.fileName());
357 l.append(
it.nextFileInfo());
591 SortFlags sort, Filters
filters)
649 return d->dirEntry.filePath();
663 d->resolveAbsoluteEntry();
664 return d->absoluteDirEntry.filePath();
686 if (!
d->fileEngine) {
707 return d->dirEntry.fileName();
717 if (
size > 1 &&
path.at(1).unicode() ==
':') {
723 for (
int i = 2;
i-- > 0; ) {
724 while (drive <
size &&
path.at(drive).unicode() ==
'/')
727 qWarning(
"Base directory starts with neither a drive nor a UNC share: %s",
731 while (drive <
size &&
path.at(drive).unicode() !=
'/')
778 const int drive = drivePrefixLength(
ret);
802 d->resolveAbsoluteEntry();
803 const QString absoluteDirPath =
d->absoluteDirEntry.filePath();
805 return absoluteDirPath;
810 const int drive = drivePrefixLength(absoluteDirPath);
814 qWarning(
"Base directory's drive is not a letter: %s",
843 bool fileDriveMissing =
false;
845 fileDrive = dirDrive;
846 fileDriveMissing =
true;
855 if (!fileDriveMissing)
863 const auto dend = dirElts.end();
864 const auto fend = fileElts.end();
865 auto dit = dirElts.begin();
866 auto fit = fileElts.begin();
870 #if defined(Q_OS_WIN)
878 while (dit != dend && fit != fend && eq(*dit, *fit)) {
883 while (dit != dend) {
889 while (fit != fend) {
918 #if defined(Q_OS_WIN)
926 for (;
i <
n.length(); ++
i) {
951 #if defined(Q_OS_WIN)
952 return QFileSystemEntry::removeUncOrLongPathPrefix(pathName).
replace(
u'\\',
u'/');
980 newPath = qt_cleanPath(
dirName);
982 newPath =
d->dirEntry.filePath();
990 newPath = qt_cleanPath(newPath, &
ok);
1008 dir->setPath(newPath);
1037 return d->nameFilters;
1058 d->initFileEngine();
1059 d->clearFileLists();
1064 #ifdef QT_BUILD_CORE_LIB
1087 if (prefix.
length() < 2) {
1088 qWarning(
"QDir::setSearchPaths: Prefix must be longer than 1 character");
1092 for (
int i = 0;
i < prefix.
count(); ++
i) {
1094 qWarning(
"QDir::setSearchPaths: Prefix can only contain letters or numbers");
1224 d->initFileEngine();
1225 d->clearFileLists();
1281 d->initFileEngine();
1282 d->clearFileLists();
1297 d->initFileLists(*
this);
1298 return d->files.count();
1311 d->initFileLists(*
this);
1312 return d->files[
pos];
1380 SortFlags sort)
const
1390 d->initFileLists(*
this);
1396 while (
it.hasNext())
1397 l.append(
it.nextFileInfo());
1399 d->sortFileList(sort,
l, &
ret,
nullptr);
1420 SortFlags sort)
const
1430 d->initFileLists(*
this);
1431 return d->fileInfos;
1436 while (
it.hasNext())
1437 l.append(
it.nextFileInfo());
1439 d->sortFileList(sort,
l,
nullptr, &
ret);
1468 qWarning(
"QDir::mkdir: Empty or null file name");
1475 return d->fileEngine->mkdir(
fn,
false, permissions);
1490 qWarning(
"QDir::mkdir: Empty or null file name");
1497 return d->fileEngine->mkdir(
fn,
false);
1514 qWarning(
"QDir::rmdir: Empty or null file name");
1522 return d->fileEngine->rmdir(
fn,
false);
1542 qWarning(
"QDir::mkpath: Empty or null file name");
1549 return d->fileEngine->mkdir(
fn,
true);
1568 qWarning(
"QDir::rmpath: Empty or null file name");
1575 return d->fileEngine->rmdir(
fn,
true);
1603 bool success =
true;
1645 if (!
d->fileEngine) {
1652 const QAbstractFileEngine::FileFlags
info =
1747 std::unique_ptr<QDirPrivate>
dir;
1748 if (!!
d->fileEngine) {
1756 d->resolveAbsoluteEntry();
1758 dir->setPath(
d->absoluteDirEntry.filePath());
1781 if (!
d->fileEngine || !
other->fileEngine) {
1782 if (
d->fileEngine.get() !=
other->fileEngine.get())
1787 if (
d->fileEngine->caseSensitive() !=
other->fileEngine->caseSensitive())
1792 if (
d->filters ==
other->filters
1793 &&
d->sort ==
other->sort
1794 &&
d->nameFilters ==
other->nameFilters) {
1797 if (
d->dirEntry.filePath() ==
other->dirEntry.filePath())
1809 d->resolveAbsoluteEntry();
1810 other->resolveAbsoluteEntry();
1811 return d->absoluteDirEntry.filePath().compare(
other->absoluteDirEntry.filePath(), sensitive) == 0;
1856 qWarning(
"QDir::remove: Empty or null file name");
1881 qWarning(
"QDir::rename: Empty or null file name(s)");
1903 if (
name.isEmpty()) {
1904 qWarning(
"QDir::exists: Empty or null file name");
1927 return !
it.hasNext();
1941 #ifdef QT_NO_FSFILEENGINE
2116 #if QT_CONFIG(regularexpression)
2174 char16_t *
out = outVector.
data();
2179 const int prefixLength = rootLength(
name, allowUncPaths);
2185 if (
i > 0 &&
p[
i] ==
'/' && !isRemote) {
2190 auto isDot = [](
const ushort *
p,
int i) {
2191 return i > 1 &&
p[
i - 1] ==
'.' &&
p[
i - 2] ==
'/';
2193 auto isDotDot = [](
const ushort *
p,
int i) {
2194 return i > 2 &&
p[
i - 1] ==
'.' &&
p[
i - 2] ==
'.' &&
p[
i - 3] ==
'/';
2200 if (isRemote && !up) {
2213 if (
p[
i] ==
'.' && (
i == 0 ||
p[
i-1] ==
'/')) {
2219 if (
i >= 1 &&
p[
i] ==
'.' &&
p[
i-1] ==
'.' && (
i < 2 ||
p[
i - 2] ==
'/')) {
2221 i -=
i >= 2 ? 3 : 2;
2225 while (
i > 0 && up &&
p[
i] ==
'/') {
2234 if (!up && used !=
len &&
out[used] !=
'/')
2241 if (isRemote && !up) {
2242 while (
i > 0 &&
p[
i] ==
'/' && !isDotDot(
p,
i)) {
2277 *
ok = prefixLength == 0 || up == 0;
2280 while (up && !isRemote) {
2281 if (used !=
len &&
out[used] !=
'/')
2288 bool isEmpty = used ==
len;
2291 if (!isEmpty &&
out[used] ==
'/') {
2296 for (
int i = prefixLength - 1;
i >= 0; --
i)
2297 out[--used] = prefix[
i];
2303 }
else if (
out[used] ==
'/') {
2319 if (
path.isEmpty()) {
2329 #if defined (Q_OS_WIN)
2352 return qt_cleanPath(
path);
2375 d->metaData.clear();
2376 d->initFileEngine();
2377 d->clearFileLists();
2453 #ifndef QT_NO_DEBUG_STREAM
2457 debug.resetFormat();
2485 debug.resetFormat();
2487 debug <<
"QDir::SortFlags(NoSort)";
2509 debug.resetFormat();
2510 debug <<
"QDir(" <<
dir.path() <<
", nameFilters = {"
small capitals from c petite p scientific f u
small capitals from c petite p scientific i
[1]
The QChar class provides a 16-bit Unicode character.
constexpr bool isLetterOrNumber() const noexcept
constexpr bool isNull() const noexcept
operator<<(QDataStream &ds, qfloat16 f)
The QDateTime class provides date and time functions.
qint64 msecsTo(const QDateTime &) const
void setTimeSpec(Qt::TimeSpec spec)
The QDebug class provides an output stream for debugging information.
Convenience class for custom QDebug operators.
The QDir class provides access to directory structures and their contents.
bool mkdir(const QString &dirName) const
bool remove(const QString &fileName)
QStringList entryList(Filters filters=NoFilter, SortFlags sort=NoSort) const
QString operator[](int) const
bool operator==(const QDir &dir) const
QDir & operator=(const QDir &)
static bool isAbsolutePath(const QString &path)
SortFlags sorting() const
static QStringList nameFiltersFromString(const QString &nameFilter)
bool rmpath(const QString &dirPath) const
static bool isRelativePath(const QString &path)
QDebug operator<<(QDebug debug, QDir::Filters filters)
static QString fromNativeSeparators(const QString &pathName)
static bool setCurrent(const QString &path)
static void setSearchPaths(const QString &prefix, const QStringList &searchPaths)
bool cd(const QString &dirName)
static QStringList searchPaths(const QString &prefix)
QString canonicalPath() const
bool rename(const QString &oldName, const QString &newName)
QSharedDataPointer< QDirPrivate > d_ptr
void setSorting(SortFlags sort)
QString absolutePath() const
static void addSearchPath(const QString &prefix, const QString &path)
QFileInfoList entryInfoList(Filters filters=NoFilter, SortFlags sort=NoSort) const
bool mkpath(const QString &dirPath) const
static QFileInfoList drives()
static QString tempPath()
QString filePath(const QString &fileName) const
void setFilter(Filters filter)
static QString cleanPath(const QString &path)
void setPath(const QString &path)
void setNameFilters(const QStringList &nameFilters)
QString relativeFilePath(const QString &fileName) const
static QString toNativeSeparators(const QString &pathName)
QString absoluteFilePath(const QString &fileName) const
static QString homePath()
bool isEmpty(Filters filters=Filters(AllEntries|NoDotAndDotDot)) const
static QString currentPath()
static QString rootPath()
bool rmdir(const QString &dirName) const
QStringList nameFilters() const
The QDirIterator class provides an iterator for directory entrylists.
static void sortFileList(QDir::SortFlags, QFileInfoList &, QStringList *, QFileInfoList *)
void resolveAbsoluteEntry() const
static QChar getFilterSepChar(const QString &nameFilter)
std::unique_ptr< QAbstractFileEngine > fileEngine
void setPath(const QString &path)
QFileSystemEntry dirEntry
QFileSystemEntry absoluteDirEntry
QFileSystemMetaData metaData
void initFileLists(const QDir &dir) const
bool fileListsInitialized
QDirPrivate(const QString &path, const QStringList &nameFilters_=QStringList(), QDir::SortFlags sort_=QDir::SortFlags(QDir::Name|QDir::IgnoreCase), QDir::Filters filters_=QDir::AllEntries)
static QStringList splitFilters(const QString &nameFilter, QChar sep={})
bool operator()(const QDirSortItem &, const QDirSortItem &) const
QDirSortItemComparator(QDir::SortFlags flags)
static QFileInfoList drives()
The QFile class provides an interface for reading from and writing to files.
bool setPermissions(Permissions permissionSpec) override
Permissions permissions() const override
bool rename(const QString &newName)
The QFileInfo class provides system-independent file information.
QDateTime lastModified() const
QString absoluteFilePath() const
static QFileSystemEntry canonicalName(const QFileSystemEntry &entry, QFileSystemMetaData &data)
static QAbstractFileEngine * resolveEntryAndCreateLegacyEngine(QFileSystemEntry &entry, QFileSystemMetaData &data)
static bool setCurrentPath(const QFileSystemEntry &entry)
static bool fillMetaData(const QFileSystemEntry &entry, QFileSystemMetaData &data, QFileSystemMetaData::MetaDataFlags what)
static QString rootPath()
static bool createDirectory(const QFileSystemEntry &entry, bool createParents, std::optional< QFile::Permissions > permissions=std::nullopt)
static QString homePath()
static QFileSystemEntry absoluteName(const QFileSystemEntry &entry)
static QString tempPath()
static bool isCaseSensitive()
static bool removeDirectory(const QFileSystemEntry &entry, bool removeEmptyParents)
static QFileSystemEntry currentPath()
bool remove(const Key &key)
T value(const Key &key) const noexcept
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
void append(parameter_type t)
const_iterator ConstIterator
The QReadLocker class is a convenience class that simplifies locking and unlocking read-write locks f...
static QRegularExpression fromWildcard(QStringView pattern, Qt::CaseSensitivity cs=Qt::CaseInsensitive, WildcardConversionOptions options=DefaultWildcardConversion)
The QScopedArrayPointer class stores a pointer to a dynamically allocated array of objects,...
T * data() const noexcept
The QSharedData class is a base class for shared data objects. \reentrant.
const T * constData() const noexcept
The QString class provides a Unicode character string.
bool startsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
QString & replace(qsizetype i, qsizetype len, QChar after)
static QString fromLatin1(QByteArrayView ba)
static QString fromUtf16(const char16_t *, qsizetype size=-1)
const QChar * constData() const
const QChar at(qsizetype i) const
bool endsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
int compare(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
QString toLower() const &
QString left(qsizetype n) const
static QString static QString qsizetype indexOf(QChar c, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
int localeAwareCompare(const QString &s) const
QString & remove(qsizetype i, qsizetype len)
auto tokenize(Needle &&needle, Flags...flags) const &noexcept(noexcept(qTokenize(std::declval< const QString & >(), std::forward< Needle >(needle), flags...))) -> decltype(qTokenize(*this, std::forward< Needle >(needle), flags...))
The QStringList class provides a list of strings.
The QStringView class provides a unified view on UTF-16 strings with a read-only subset of the QStrin...
int compare(QStringView other, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
The QWriteLocker class is a convenience class that simplifies locking and unlocking read-write locks ...
backing_store_ptr info
[4]
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp *numpix else pixst endif endm macro vuzp8 reg2 vuzp d d ®2 endm macro vzip8 reg2 vzip d d ®2 endm macro pixdeinterleave basereg basereg basereg basereg basereg endif endm macro pixinterleave basereg basereg basereg basereg basereg endif endm macro PF boost_increment endif if endif PF tst PF addne PF subne PF cmp ORIG_W if endif if endif if endif PF subge ORIG_W PF subges if endif if endif if endif endif endm macro cache_preload_simple endif if dst_r_bpp pld[DST_R, #(PREFETCH_DISTANCE_SIMPLE *dst_r_bpp/8)] endif if mask_bpp pld endif[MASK, #(PREFETCH_DISTANCE_SIMPLE *mask_bpp/8)] endif endif endm macro ensure_destination_ptr_alignment process_pixblock_tail_head if beq irp skip1 beq endif SRC MASK if dst_r_bpp DST_R else add endif PF add sub src_basereg pixdeinterleave mask_basereg pixdeinterleave dst_r_basereg process_pixblock_head pixblock_size cache_preload_simple process_pixblock_tail pixinterleave dst_w_basereg irp beq endif process_pixblock_tail_head tst beq irp if pixblock_size chunk_size tst beq pixld SRC pixld MASK if DST_R else pixld DST_R endif if
QList< QString > QStringList
QString qt_normalizePathSegments(const QString &name, QDirPrivate::PathNormalizations flags, bool *ok)
QList< QFileInfo > QFileInfoList
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLsizei const GLuint * paths
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLsizei const GLchar *const * path
constexpr auto qTokenize(Haystack &&h, Needle &&n, Flags...flags) noexcept(QtPrivate::Tok::is_nothrow_constructible_from< Haystack, Needle >::value) -> decltype(QtPrivate::Tok::TokenizerResult< Haystack, Needle >{std::forward< Haystack >(h), std::forward< Needle >(n), flags...})
QFileInfo fi("c:/temp/foo")
[newstuff]
QTextStream out(stdout)
[7]
const QStringList filters({"Image files (*.png *.xpm *.jpg)", "Text files (*.txt)", "Any files (*)" })
[6]
static QCoreGlobalData * instance()
QHash< QString, QStringList > dirSearchPaths
The QLatin1Char class provides an 8-bit ASCII/Latin-1 character.