UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Paths.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
8#include "CoreTypes.h"
11
12#include <type_traits>
13
14class FText;
15
16namespace UE::Core::Private
17{
18 const TCHAR* GetBindingType(const TCHAR* Ptr);
19 const FString& GetBindingType(const FString& Str);
20 const FStringView& GetBindingType(const FStringView& StringView);
21
22 // This is used to force the arguments of FPaths::Combine to implicitly convert (if necessary)
23 // to FString when calling CombineImpl(), allowing them to remain as temporaries on the stack
24 // so that they stay allocated during the combining process.
25 //
26 // Pointer/view arguments are passed without causing FString temporaries to be created,
27 // and FString arguments are referenced directly without creating extra copies.
28 template <typename T>
29 using TToStringType_T = decltype(GetBindingType(std::declval<T>()));
30}
31
35class FPaths
36{
37public:
38
42 static CORE_API bool CanGetProjectDir();
43
47 static CORE_API bool IsStaged();
48
52 static CORE_API bool ShouldSaveToUserDir();
53
57 static CORE_API FString LaunchDir();
58
66 static CORE_API FString EngineDir();
67
73 static CORE_API FString EngineUserDir();
74
81
88 static CORE_API FString EngineContentDir();
89
95 static CORE_API FString EngineConfigDir();
96
102 static CORE_API FString EngineEditorSettingsDir();
103
109 static CORE_API FString EngineIntermediateDir();
110
116 static CORE_API FString EngineSavedDir();
117
123 static CORE_API FString EnginePluginsDir();
124
129 static CORE_API FString EngineDefaultLayoutDir();
130
135 static CORE_API FString EngineProjectLayoutDir();
136
141 static CORE_API FString EngineUserLayoutDir();
142
148 static CORE_API FString EnterpriseDir();
149
155 static CORE_API FString EnterprisePluginsDir();
156
162 static CORE_API FString EnterpriseFeaturePackDir();
163
169 UE_DEPRECATED(5.4, "Use EnginePlatformExtensionDir(Platform) instead - ProjectPlatformExtensionsDir did not handle programs properly, so for consistency this is being removed as well")
170 static CORE_API FString EnginePlatformExtensionsDir();
171
182
188 UE_DEPRECATED(5.4, "Use ProjectPlatformExtensionDir(Platform) instead - this function does not handle Programs properly")
190
201
216
221 static CORE_API FString ConvertPath(const FString& Path, EPathConversion Method, const TCHAR* ExtraData=nullptr, const TCHAR* OverrideProjectDir=nullptr);
222
229 static CORE_API TArray<FString> GetExtensionDirs(const FString& BaseDir, const FString& SubDir, bool bCheckValid);
230
232 {
233 None = 0,
234 // Include the Base directory
235 WithBase = (1 << 0),
236 // Include Restricted extension directories
237 WithRestricted = (1 << 1),
238 // Include Platform extension directories
239 WithPlatforms = (1 << 2),
240 // Use FDataDrivePlatformInfo to determine valid platforms, otherwise just use what's present
241 CheckPlatformsValid = (1 << 3),
242 Default = 0xFF
243 };
245
253 const FString& BaseDir,
254 const FString& SubDir = FString(),
256
262 static CORE_API FString RootDir();
263
264#if WITH_EDITOR
266 static CORE_API const TCHAR* GameFeatureRootPrefix();
267#endif
268
277 static CORE_API FString ProjectDir();
278
284 static CORE_API FString ProjectUserDir();
285
291 static CORE_API FString ProjectContentDir();
292
298 static CORE_API FString ProjectConfigDir();
299
305 static CORE_API const FString& ProjectSavedDir();
306
312 static CORE_API FString ProjectIntermediateDir();
313
314 static CORE_API FString ShaderWorkingDir();
315
321 static CORE_API FString ProjectPluginsDir();
322
328 static CORE_API FString ProjectModsDir();
329
330 /*
331 * Returns true if a writable directory for downloaded data that persists across play sessions is available
332 */
334
335 /*
336 * Returns the writable directory for downloaded data that persists across play sessions.
337 */
338 static CORE_API FString ProjectPersistentDownloadDir();
339
346 static CORE_API FString SourceConfigDir();
347
353 static CORE_API FString GeneratedConfigDir();
354
360 static CORE_API FString SandboxesDir();
361
367 static CORE_API FString ProfilingDir();
368
374 static CORE_API FString ScreenShotDir();
375
381 static CORE_API FString BugItDir();
382
388 static CORE_API FString VideoCaptureDir();
389
395 static CORE_API FString AudioCaptureDir();
396
404 static CORE_API FString ProjectLogDir();
405
407 static CORE_API FString AutomationDir();
408
410 static CORE_API FString AutomationTransientDir();
411
413 static CORE_API FString AutomationReportsDir();
414
416 static CORE_API FString AutomationLogDir();
417
419 static CORE_API FString CloudDir();
420
425 static CORE_API FString GameDevelopersDir();
426
432
434 static CORE_API FString GameUserDeveloperFolderName();
435
437 static CORE_API FString GameUserDeveloperDir();
438
440 static CORE_API FString DiffDir();
441
446
451
455 UE_DEPRECATED(5.5, "Cooked editor localization path no longer exist. Cooked editors now load game localization paths.")
457
462
467
472
477
482
486 static CORE_API bool IsRestrictedPath(const FString& InPath);
487
494 static CORE_API FString GameAgnosticSavedDir();
495
497 static CORE_API FString EngineSourceDir();
498
500 static CORE_API FString GameSourceDir();
501
503 static CORE_API FString FeaturePackDir();
504
510 static CORE_API bool IsProjectFilePathSet();
511
517 static CORE_API FString GetProjectFilePath();
518
524 static CORE_API void SetProjectFilePath( const FString& NewGameProjectFilePath );
525
533 static CORE_API FString GetExtension( const FString& InPath, bool bIncludeDot=false );
534
535 // Returns the filename (with extension), minus any path information.
536 static CORE_API FString GetCleanFilename(const FString& InPath);
537 static CORE_API FString GetCleanFilenameUtf8(const FUtf8String& InPath);
538
539 // Returns the filename (with extension), minus any path information.
540 static CORE_API FString GetCleanFilename(FString&& InPath);
541
542 // Returns the same thing as GetCleanFilename, but without the extension
543 static CORE_API FString GetBaseFilename(const FString& InPath, bool bRemovePath=true );
544
545 // Returns the same thing as GetCleanFilename, but without the extension
546 static CORE_API FString GetBaseFilename(FString&& InPath, bool bRemovePath = true);
547
548 // Returns the path in front of the filename
549 static CORE_API FString GetPath(const FString& InPath);
550
551 // Returns the path in front of the filename
552 static CORE_API FString GetPath(FString&& InPath);
553
554 // Returns the leaf in the path
555 static CORE_API FString GetPathLeaf(const FString& InPath);
556
557 // Returns the leaf in the path
558 static CORE_API FString GetPathLeaf(FString&& InPath);
559
561 static CORE_API FString ChangeExtension(const FString& InPath, const FString& InNewExtension);
562
564 static CORE_API FString SetExtension(const FString& InPath, const FString& InNewExtension);
565
567 static CORE_API bool FileExists(const FString& InPath);
568
570 static CORE_API bool DirectoryExists(const FString& InPath);
571
573 static CORE_API bool IsDrive(const FString& InPath);
574
576 static CORE_API bool IsRelative(const FString& InPath);
577
579 static CORE_API void NormalizeFilename(FString& InPath);
580
582 static CORE_API FString FindCorrectCase(const FString& Path);
583
592 static CORE_API bool IsSamePath(const FString& PathA, const FString& PathB);
593
595 static CORE_API bool IsUnderDirectory(const FString& InPath, const FString& InDirectory);
596
598 static CORE_API void NormalizeDirectoryName(FString& InPath);
599
612 static CORE_API bool CollapseRelativeDirectories(FString& InPath, bool bCollapseAllPossible = false);
613
622 static CORE_API void RemoveDuplicateSlashes(FString& InPath);
623
625 static CORE_API FString RemoveDuplicateSlashes(const FString& InPath);
626
634 static CORE_API FString CreateStandardFilename(const FString& InPath);
635
636 static CORE_API void MakeStandardFilename(FString& InPath);
637
639 static CORE_API void MakePlatformFilename(FString& InPath);
640
648 static CORE_API bool MakePathRelativeTo( FString& InPath, const TCHAR* InRelativeTo );
649
653 static CORE_API FString ConvertRelativePathToFull(const FString& InPath);
654
658 static CORE_API FString ConvertRelativePathToFull(FString&& InPath);
659
663 static CORE_API FString ConvertRelativePathToFull(const FString& BasePath, const FString& InPath);
664
668 static CORE_API FString ConvertRelativePathToFull(const FString& BasePath, FString&& InPath);
669
673 static CORE_API FString ConvertRelativePathToFull(FString&& BasePath, const FString& InPath);
674
678 static CORE_API FString ConvertRelativePathToFull(FString&& BasePath, FString&& InPath);
679
685 static CORE_API FString ConvertToSandboxPath( const FString& InPath, const TCHAR* InSandboxName );
686
692 static CORE_API FString ConvertFromSandboxPath( const FString& InPath, const TCHAR* InSandboxName );
693
701 static CORE_API FString CreateTempFilename( const TCHAR* Path, const TCHAR* Prefix = TEXT(""), const TCHAR* Extension = TEXT(".tmp") );
702
706 static CORE_API FString GetInvalidFileSystemChars();
707
712 static CORE_API FString MakeValidFileName(const FString& InString, const TCHAR InReplacementChar = TEXT('\0'));
713
721 static CORE_API bool ValidatePath( const FString& InPath, FText* OutReason = nullptr );
722
731 static CORE_API void Split( const FString& InPath, FString& PathPart, FString& FilenamePart, FString& ExtensionPart );
732
734 static CORE_API const FString& GetRelativePathToRoot();
735
736 template <typename... PathTypes>
738 {
739 return CombineImpl<PathTypes...>(Forward<PathTypes>(InPaths)...);
740 }
741
745 static CORE_API void TearDown();
746
747protected:
748
749 static CORE_API FString CombineInternal(const FStringView* Paths, int32 NumPaths);
755 static void PlatformIndependentNormalizePath(FString& Path, bool bRemoveDuplicateSlashes,
757
758private:
759 struct FStaticData;
760
761 template <typename... PathTypes>
762 inline static FString CombineImpl(UE::Core::Private::TToStringType_T<std::decay_t<PathTypes>>... InPaths)
763 {
764 const FStringView Paths[] = { FStringView(InPaths)... };
765 return CombineInternal(Paths, UE_ARRAY_COUNT(Paths));
766 }
767
769 static CORE_API const FString& CustomUserDirArgument();
770
772 static CORE_API const FString& CustomShaderDirArgument();
773};
774
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
#define Split(a, ahi, alo)
Definition Predicates.inl:204
TStringView< TCHAR > FStringView
Definition StringFwd.h:45
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Paths.h:36
static CORE_API bool IsRestrictedPath(const FString &InPath)
Definition Paths.cpp:827
static CORE_API FString ProjectIntermediateDir()
Definition Paths.cpp:507
static CORE_API FString ProjectPlatformExtensionsDir()
Definition Paths.cpp:304
static CORE_API FString GameSourceDir()
Definition Paths.cpp:872
static CORE_API const TArray< FString > & GetPropertyNameLocalizationPaths()
Definition Paths.cpp:728
static UE_FORCEINLINE_HINT FString Combine(PathTypes &&... InPaths)
Definition Paths.h:737
static CORE_API void NormalizeDirectoryName(FString &InPath)
Definition Paths.cpp:1343
static CORE_API FString GetPlatformLocalizationFolderName()
Definition Paths.cpp:797
static CORE_API bool IsProjectFilePathSet()
Definition Paths.cpp:882
static CORE_API bool ValidatePath(const FString &InPath, FText *OutReason=nullptr)
Definition Paths.cpp:1733
static CORE_API bool IsSamePath(const FString &PathA, const FString &PathB)
Definition Paths.cpp:1902
FRIEND_ENUM_CLASS_FLAGS(EGetExtensionDirsFlags)
static CORE_API void RemoveDuplicateSlashes(FString &InPath)
Definition Paths.cpp:1376
static CORE_API FString ProjectModsDir()
Definition Paths.cpp:529
static CORE_API FString EnterprisePluginsDir()
Definition Paths.cpp:289
static CORE_API FString EngineUserDir()
Definition Paths.cpp:204
static CORE_API const TArray< FString > & GetEditorLocalizationPaths()
Definition Paths.cpp:704
static CORE_API FString CombineInternal(const FStringView *Paths, int32 NumPaths)
Definition Paths.cpp:1880
static CORE_API const TArray< FString > & GetEngineLocalizationPaths()
Definition Paths.cpp:680
static CORE_API FString ProjectConfigDir()
Definition Paths.cpp:491
static CORE_API FString ProjectDir()
Definition Paths.cpp:457
static CORE_API FString ProfilingDir()
Definition Paths.cpp:559
static CORE_API FString FeaturePackDir()
Definition Paths.cpp:877
static CORE_API FString SandboxesDir()
Definition Paths.cpp:554
static CORE_API FString GameAgnosticSavedDir()
Definition Paths.cpp:862
static CORE_API bool DirectoryExists(const FString &InPath)
Definition Paths.cpp:1154
static CORE_API FString AutomationLogDir()
Definition Paths.cpp:623
static CORE_API FString EngineConfigDir()
Definition Paths.cpp:233
static CORE_API FString EngineVersionAgnosticUserDir()
Definition Paths.cpp:216
static CORE_API FString EngineSavedDir()
Definition Paths.cpp:253
static CORE_API FString EngineContentDir()
Definition Paths.cpp:228
static CORE_API bool IsUnderDirectory(const FString &InPath, const FString &InDirectory)
Definition Paths.cpp:1917
static CORE_API bool FileExists(const FString &InPath)
Definition Paths.cpp:1149
static FString ProjectPlatformExtensionDir(const TCHAR *Platform)
Definition Paths.h:197
static void PlatformIndependentNormalizePath(FString &Path, bool bRemoveDuplicateSlashes, int32 &OutFirstColonIndex, int32 &OutFirstSlashIndex)
Definition Paths.cpp:1284
static CORE_API FString ProjectPersistentDownloadDir()
Definition Paths.cpp:539
static CORE_API FString ScreenShotDir()
Definition Paths.cpp:564
static CORE_API FString GameDevelopersDir()
Definition Paths.cpp:633
static CORE_API bool ShouldSaveToUserDir()
Definition Paths.cpp:183
static CORE_API FString EnterpriseDir()
Definition Paths.cpp:284
static CORE_API FString ProjectLogDir()
Definition Paths.cpp:584
static CORE_API bool MakePathRelativeTo(FString &InPath, const TCHAR *InRelativeTo)
Definition Paths.cpp:1523
static CORE_API FString CreateStandardFilename(const FString &InPath)
Definition Paths.cpp:1414
static CORE_API FString BugItDir()
Definition Paths.cpp:569
static FString EnginePlatformExtensionDir(const TCHAR *Platform)
Definition Paths.h:178
static CORE_API FString EnginePluginsDir()
Definition Paths.cpp:264
static CORE_API void MakePlatformFilename(FString &InPath)
Definition Paths.cpp:1517
static CORE_API FString ConvertFromSandboxPath(const FString &InPath, const TCHAR *InSandboxName)
Definition Paths.cpp:1636
static CORE_API FString SetExtension(const FString &InPath, const FString &InNewExtension)
Definition Paths.cpp:1124
static CORE_API FString EngineUserLayoutDir()
Definition Paths.cpp:279
static CORE_API FString AutomationDir()
Definition Paths.cpp:608
static CORE_API const FString & ProjectSavedDir()
Definition Paths.cpp:496
static CORE_API bool IsRelative(const FString &InPath)
Definition Paths.cpp:1267
static CORE_API FStringView DevelopersFolderName()
Definition Paths.cpp:641
static CORE_API FString ChangeExtension(const FString &InPath, const FString &InNewExtension)
Definition Paths.cpp:1094
static CORE_API FString EngineProjectLayoutDir()
Definition Paths.cpp:274
static CORE_API FString LaunchDir()
Definition Paths.cpp:194
static CORE_API FString EngineSourceDir()
Definition Paths.cpp:867
static CORE_API void NormalizeFilename(FString &InPath)
Definition Paths.cpp:1334
static CORE_API FString GetCleanFilenameUtf8(const FUtf8String &InPath)
Definition Paths.cpp:978
static CORE_API FString GetBaseFilename(const FString &InPath, bool bRemovePath=true)
Definition Paths.cpp:1033
static CORE_API FString AudioCaptureDir()
Definition Paths.cpp:579
static CORE_API FString GameUserDeveloperDir()
Definition Paths.cpp:670
static CORE_API FString EngineEditorSettingsDir()
Definition Paths.cpp:238
EGetExtensionDirsFlags
Definition Paths.h:232
static CORE_API const TArray< FString > & GetGameLocalizationPaths()
Definition Paths.cpp:776
static TArray< FString > GetCookedEditorLocalizationPaths()
Definition Paths.h:456
static CORE_API TArray< FString > GetExtensionDirs(const FString &BaseDir, const FString &SubDir, bool bCheckValid)
Definition Paths.cpp:432
static CORE_API bool CanGetProjectDir()
Definition Paths.cpp:156
static CORE_API bool IsStaged()
Definition Paths.cpp:161
static CORE_API FString EngineDir()
Definition Paths.cpp:199
static CORE_API void TearDown()
Definition Paths.cpp:1937
static CORE_API bool CollapseRelativeDirectories(FString &InPath, bool bCollapseAllPossible=false)
Definition Paths.cpp:1362
static CORE_API FString GetCleanFilename(const FString &InPath)
Definition Paths.cpp:967
static CORE_API FString EnterpriseFeaturePackDir()
Definition Paths.cpp:294
static CORE_API FString GetProjectFilePath()
Definition Paths.cpp:889
static CORE_API const TArray< FString > & GetToolTipLocalizationPaths()
Definition Paths.cpp:752
static CORE_API FString ProjectPluginsDir()
Definition Paths.cpp:524
static CORE_API FString DiffDir()
Definition Paths.cpp:675
static CORE_API FString CloudDir()
Definition Paths.cpp:628
static CORE_API FString SourceConfigDir()
Definition Paths.cpp:544
static CORE_API const TArray< FString > & GetRestrictedFolderNames()
Definition Paths.cpp:803
static CORE_API FString RootDir()
Definition Paths.cpp:452
static CORE_API FString ConvertRelativePathToFull(const FString &InPath)
Definition Paths.cpp:1586
static CORE_API FString CreateTempFilename(const TCHAR *Path, const TCHAR *Prefix=TEXT(""), const TCHAR *Extension=TEXT(".tmp"))
Definition Paths.cpp:1648
static CORE_API FString AutomationTransientDir()
Definition Paths.cpp:613
static CORE_API FString ShaderWorkingDir()
Definition Paths.cpp:512
static CORE_API FString GetPathLeaf(const FString &InPath)
Definition Paths.cpp:1070
static CORE_API FString ProjectUserDir()
Definition Paths.cpp:462
static CORE_API FString EngineIntermediateDir()
Definition Paths.cpp:248
static CORE_API FString ConvertPath(const FString &Path, EPathConversion Method, const TCHAR *ExtraData=nullptr, const TCHAR *OverrideProjectDir=nullptr)
Definition Paths.cpp:310
static CORE_API FString GetInvalidFileSystemChars()
Definition Paths.cpp:1660
static CORE_API FString FindCorrectCase(const FString &Path)
Definition Paths.cpp:904
static CORE_API FString ProjectContentDir()
Definition Paths.cpp:486
static CORE_API FString EnginePlatformExtensionsDir()
Definition Paths.cpp:299
static CORE_API bool HasProjectPersistentDownloadDir()
Definition Paths.cpp:534
static CORE_API void SetProjectFilePath(const FString &NewGameProjectFilePath)
Definition Paths.cpp:896
static CORE_API FString GameUserDeveloperFolderName()
Definition Paths.cpp:646
static CORE_API FString VideoCaptureDir()
Definition Paths.cpp:574
static CORE_API void MakeStandardFilename(FString &InPath)
Definition Paths.cpp:1512
static CORE_API bool IsDrive(const FString &InPath)
Definition Paths.cpp:1159
static CORE_API FString GetPath(const FString &InPath)
Definition Paths.cpp:1043
EPathConversion
Definition Paths.h:203
static CORE_API FString GetExtension(const FString &InPath, bool bIncludeDot=false)
Definition Paths.cpp:955
static CORE_API FString AutomationReportsDir()
Definition Paths.cpp:618
static CORE_API FString EngineDefaultLayoutDir()
Definition Paths.cpp:269
static CORE_API FString GeneratedConfigDir()
Definition Paths.cpp:549
static CORE_API const FString & GetRelativePathToRoot()
Definition Paths.cpp:1855
static CORE_API FString ConvertToSandboxPath(const FString &InPath, const TCHAR *InSandboxName)
Definition Paths.cpp:1616
static CORE_API FString MakeValidFileName(const FString &InString, const TCHAR InReplacementChar=TEXT('\0'))
Definition Paths.cpp:1670
Definition Text.h:385
Definition Array.h:670
implementation
Definition PlayInEditorLoadingScope.h:8
decltype(GetBindingType(std::declval< T >())) TToStringType_T
Definition Paths.h:29
const TCHAR * GetBindingType(const TCHAR *Ptr)