455QString QStandardPaths::locate(StandardLocation type,
const QString &fileName, LocateOptions options)
457 const QStringList &dirs = standardLocations(type);
458 for (QStringList::const_iterator dir = dirs.constBegin(); dir != dirs.constEnd(); ++dir) {
459 const QString path = *dir + u'/' + fileName;
460 if (existsAsSpecified(path, options))
469QStringList QStandardPaths::locateAll(StandardLocation type,
const QString &fileName, LocateOptions options)
471 const QStringList &dirs = standardLocations(type);
473 for (QStringList::const_iterator dir = dirs.constBegin(); dir != dirs.constEnd(); ++dir) {
474 const QString path = *dir + u'/' + fileName;
475 if (existsAsSpecified(path, options))
481static Q_DECL_COLD_FUNCTION QString fallbackPathVariable()
489 size_t n = confstr(_CS_PATH,
nullptr, 0);
492 QVarLengthArray<
char, 1024> rawpath(n);
493 confstr(_CS_PATH, rawpath.data(), n);
494 return QString::fromLocal8Bit(QByteArrayView(rawpath.data(), n - 1));
524 const QString &executableName)
526 const QDir currentDir = QDir::current();
527 for (
const QString &searchPath : searchPaths) {
528 const QString candidate = currentDir.absoluteFilePath(searchPath + u'/' + executableName);
529 const QString absPath = checkExecutable(candidate);
530 if (!absPath.isEmpty())
541 searchExecutableAppendSuffix(
const QStringList &searchPaths,
562QString QStandardPaths::findExecutable(
const QString &executableName,
const QStringList &paths)
564 if (QFileInfo(executableName).isAbsolute())
565 return checkExecutable(executableName);
567 QStringList searchPaths = paths;
568 if (paths.isEmpty()) {
569 QString pEnv = qEnvironmentVariable(
"PATH");
570 if (Q_UNLIKELY(pEnv.isNull())) {
574 pEnv = fallbackPathVariable();
578 searchPaths.reserve(pEnv.count(QDir::listSeparator()));
579 auto tokenizer = qTokenize(pEnv, QDir::listSeparator(), Qt::SkipEmptyParts);
580 for (QStringView rawPath : tokenizer) {
581 QString cleanPath = QDir::cleanPath(rawPath.toString());
582 if (cleanPath.size() > 1 && cleanPath.endsWith(u'/'))
583 cleanPath.truncate(cleanPath.size() - 1);
584 searchPaths.push_back(cleanPath);
591 static const QStringList executable_extensions = executableExtensions();
592 if (executableName.contains(u'.')) {
593 const QString suffix = QFileInfo(executableName).suffix();
594 if (suffix.isEmpty() || !executable_extensions.contains(u'.' + suffix, Qt::CaseInsensitive))
595 return searchExecutableAppendSuffix(searchPaths, executableName, executable_extensions);
597 return searchExecutableAppendSuffix(searchPaths, executableName, executable_extensions);
600 return searchExecutable(searchPaths, executableName);
610QString QStandardPaths::displayName(StandardLocation type)
613 case DesktopLocation:
614 return QCoreApplication::translate(
"QStandardPaths",
"Desktop");
615 case DocumentsLocation:
616 return QCoreApplication::translate(
"QStandardPaths",
"Documents");
618 return QCoreApplication::translate(
"QStandardPaths",
"Fonts");
619 case ApplicationsLocation:
620 return QCoreApplication::translate(
"QStandardPaths",
"Applications");
622 return QCoreApplication::translate(
"QStandardPaths",
"Music");
624 return QCoreApplication::translate(
"QStandardPaths",
"Movies");
625 case PicturesLocation:
626 return QCoreApplication::translate(
"QStandardPaths",
"Pictures");
628 return QCoreApplication::translate(
"QStandardPaths",
"Temporary Directory");
630 return QCoreApplication::translate(
"QStandardPaths",
"Home");
631 case AppLocalDataLocation:
632 return QCoreApplication::translate(
"QStandardPaths",
"Application Data");
634 return QCoreApplication::translate(
"QStandardPaths",
"Cache");
636 return QCoreApplication::translate(
"QStandardPaths",
"State");
637 case GenericDataLocation:
638 return QCoreApplication::translate(
"QStandardPaths",
"Shared Data");
639 case RuntimeLocation:
640 return QCoreApplication::translate(
"QStandardPaths",
"Runtime");
642 return QCoreApplication::translate(
"QStandardPaths",
"Configuration");
643 case GenericConfigLocation:
644 return QCoreApplication::translate(
"QStandardPaths",
"Shared Configuration");
645 case GenericCacheLocation:
646 return QCoreApplication::translate(
"QStandardPaths",
"Shared Cache");
647 case GenericStateLocation:
648 return QCoreApplication::translate(
"QStandardPaths",
"Shared State");
649 case DownloadLocation:
650 return QCoreApplication::translate(
"QStandardPaths",
"Downloads");
651 case AppDataLocation:
652 case AppConfigLocation:
653 return QCoreApplication::translate(
"QStandardPaths",
"Application Configuration");
654 case PublicShareLocation:
655 return QCoreApplication::translate(
"QStandardPaths",
"Public");
656 case TemplatesLocation:
657 return QCoreApplication::translate(
"QStandardPaths",
"Templates");