403QString QStandardPaths::locate(StandardLocation type,
const QString &fileName, LocateOptions options)
405 const QStringList &dirs = standardLocations(type);
406 for (QStringList::const_iterator dir = dirs.constBegin(); dir != dirs.constEnd(); ++dir) {
407 const QString path = *dir + u'/' + fileName;
408 if (existsAsSpecified(path, options))
417QStringList QStandardPaths::locateAll(StandardLocation type,
const QString &fileName, LocateOptions options)
419 const QStringList &dirs = standardLocations(type);
421 for (QStringList::const_iterator dir = dirs.constBegin(); dir != dirs.constEnd(); ++dir) {
422 const QString path = *dir + u'/' + fileName;
423 if (existsAsSpecified(path, options))
429static Q_DECL_COLD_FUNCTION QString fallbackPathVariable()
437 size_t n = confstr(_CS_PATH,
nullptr, 0);
440 QVarLengthArray<
char, 1024> rawpath(n);
441 confstr(_CS_PATH, rawpath.data(), n);
442 return QString::fromLocal8Bit(QByteArrayView(rawpath.data(), n - 1));
472 const QString &executableName)
474 const QDir currentDir = QDir::current();
475 for (
const QString &searchPath : searchPaths) {
476 const QString candidate = currentDir.absoluteFilePath(searchPath + u'/' + executableName);
477 const QString absPath = checkExecutable(candidate);
478 if (!absPath.isEmpty())
489 searchExecutableAppendSuffix(
const QStringList &searchPaths,
510QString QStandardPaths::findExecutable(
const QString &executableName,
const QStringList &paths)
512 if (QFileInfo(executableName).isAbsolute())
513 return checkExecutable(executableName);
515 QStringList searchPaths = paths;
516 if (paths.isEmpty()) {
517 QString pEnv = qEnvironmentVariable(
"PATH");
518 if (Q_UNLIKELY(pEnv.isNull())) {
522 pEnv = fallbackPathVariable();
526 searchPaths.reserve(pEnv.count(QDir::listSeparator()));
527 auto tokenizer = qTokenize(pEnv, QDir::listSeparator(), Qt::SkipEmptyParts);
528 for (QStringView rawPath : tokenizer) {
529 QString cleanPath = QDir::cleanPath(rawPath.toString());
530 if (cleanPath.size() > 1 && cleanPath.endsWith(u'/'))
531 cleanPath.truncate(cleanPath.size() - 1);
532 searchPaths.push_back(cleanPath);
539 static const QStringList executable_extensions = executableExtensions();
540 if (executableName.contains(u'.')) {
541 const QString suffix = QFileInfo(executableName).suffix();
542 if (suffix.isEmpty() || !executable_extensions.contains(u'.' + suffix, Qt::CaseInsensitive))
543 return searchExecutableAppendSuffix(searchPaths, executableName, executable_extensions);
545 return searchExecutableAppendSuffix(searchPaths, executableName, executable_extensions);
548 return searchExecutable(searchPaths, executableName);
558QString QStandardPaths::displayName(StandardLocation type)
561 case DesktopLocation:
562 return QCoreApplication::translate(
"QStandardPaths",
"Desktop");
563 case DocumentsLocation:
564 return QCoreApplication::translate(
"QStandardPaths",
"Documents");
566 return QCoreApplication::translate(
"QStandardPaths",
"Fonts");
567 case ApplicationsLocation:
568 return QCoreApplication::translate(
"QStandardPaths",
"Applications");
570 return QCoreApplication::translate(
"QStandardPaths",
"Music");
572 return QCoreApplication::translate(
"QStandardPaths",
"Movies");
573 case PicturesLocation:
574 return QCoreApplication::translate(
"QStandardPaths",
"Pictures");
576 return QCoreApplication::translate(
"QStandardPaths",
"Temporary Directory");
578 return QCoreApplication::translate(
"QStandardPaths",
"Home");
579 case AppLocalDataLocation:
580 return QCoreApplication::translate(
"QStandardPaths",
"Application Data");
582 return QCoreApplication::translate(
"QStandardPaths",
"Cache");
584 return QCoreApplication::translate(
"QStandardPaths",
"State");
585 case GenericDataLocation:
586 return QCoreApplication::translate(
"QStandardPaths",
"Shared Data");
587 case RuntimeLocation:
588 return QCoreApplication::translate(
"QStandardPaths",
"Runtime");
590 return QCoreApplication::translate(
"QStandardPaths",
"Configuration");
591 case GenericConfigLocation:
592 return QCoreApplication::translate(
"QStandardPaths",
"Shared Configuration");
593 case GenericCacheLocation:
594 return QCoreApplication::translate(
"QStandardPaths",
"Shared Cache");
595 case GenericStateLocation:
596 return QCoreApplication::translate(
"QStandardPaths",
"Shared State");
597 case DownloadLocation:
598 return QCoreApplication::translate(
"QStandardPaths",
"Downloads");
599 case AppDataLocation:
600 case AppConfigLocation:
601 return QCoreApplication::translate(
"QStandardPaths",
"Application Configuration");
602 case PublicShareLocation:
603 return QCoreApplication::translate(
"QStandardPaths",
"Public");
604 case TemplatesLocation:
605 return QCoreApplication::translate(
"QStandardPaths",
"Templates");