UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
FileManagerGeneric.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"
10#include "HAL/FileManager.h"
12#include "Misc/DateTime.h"
14#include "Templates/UniquePtr.h"
15
16#ifndef PLATFORM_FILE_READER_BUFFER_SIZE
17 #define PLATFORM_FILE_READER_BUFFER_SIZE 1024
18#endif
19
20#ifndef PLATFORM_FILE_WRITER_BUFFER_SIZE
21 #define PLATFORM_FILE_WRITER_BUFFER_SIZE 4096
22#endif
23
24#ifndef PLATFORM_DEBUG_FILE_WRITER_BUFFER_SIZE
25 #define PLATFORM_DEBUG_FILE_WRITER_BUFFER_SIZE 4096
26#endif
27
36 : public IFileManager
37{
38 // instead of caching the LowLevel, we call the singleton each time to never be incorrect
39 UE_FORCEINLINE_HINT IPlatformFile& GetLowLevel() const
40 {
42 }
43
44public:
45
50
54 virtual ~FFileManagerGeneric( ) { }
55
56public:
57
58 // IFileManager interface
59
60 CORE_API virtual void ProcessCommandLineOptions() override;
61
62 virtual void SetSandboxEnabled(bool bInEnabled) override
63 {
64 GetLowLevel().SetSandboxEnabled(bInEnabled);
65 }
66
67 virtual bool IsSandboxEnabled() const override
68 {
69 return GetLowLevel().IsSandboxEnabled();
70 }
71
72 FArchive* CreateFileReader( const TCHAR* Filename, uint32 ReadFlags=0 ) override
73 {
74 return CreateFileReaderInternal( Filename, ReadFlags, PLATFORM_FILE_READER_BUFFER_SIZE );
75 }
76
77 FArchive* CreateFileWriter( const TCHAR* Filename, uint32 WriteFlags=0 ) override
78 {
79 return CreateFileWriterInternal( Filename, WriteFlags, PLATFORM_FILE_WRITER_BUFFER_SIZE );
80 }
81
82#if ALLOW_DEBUG_FILES
83 FArchive* CreateDebugFileWriter( const TCHAR* Filename, uint32 WriteFlags=0 ) override
84 {
85 return CreateFileWriterInternal( Filename, WriteFlags, PLATFORM_DEBUG_FILE_WRITER_BUFFER_SIZE );
86 }
87#endif
88
89 CORE_API bool Delete( const TCHAR* Filename, bool RequireExists=0, bool EvenReadOnly=0, bool Quiet=0 ) override;
90 CORE_API bool IsReadOnly( const TCHAR* Filename ) override;
91 CORE_API bool Move( const TCHAR* Dest, const TCHAR* Src, bool Replace=1, bool EvenIfReadOnly=0, bool Attributes=0, bool bDoNotRetryOrError=0 ) override;
92 CORE_API bool FileExists( const TCHAR* Filename ) override;
93 CORE_API bool DirectoryExists(const TCHAR* InDirectory) override;
94 CORE_API void FindFiles( TArray<FString>& Result, const TCHAR* Filename, bool Files, bool Directories ) override;
95 CORE_API void FindFilesRecursive( TArray<FString>& FileNames, const TCHAR* StartDirectory, const TCHAR* Filename, bool Files, bool Directories, bool bClearFileNames=true) override;
96 CORE_API double GetFileAgeSeconds( const TCHAR* Filename ) override;
97 CORE_API FDateTime GetTimeStamp( const TCHAR* Filename ) override;
98 CORE_API FDateTime GetAccessTimeStamp( const TCHAR* Filename ) override;
100 CORE_API bool SetTimeStamp( const TCHAR* Filename, FDateTime Timestamp ) override;
101 CORE_API virtual FString GetFilenameOnDisk(const TCHAR* Filename) override;
102
103 CORE_API virtual uint32 Copy( const TCHAR* Dest, const TCHAR* Src, bool Replace = 1, bool EvenIfReadOnly = 0, bool Attributes = 0, FCopyProgress* Progress = nullptr, EFileRead ReadFlags = FILEREAD_None, EFileWrite WriteFlags = FILEWRITE_None ) override;
104 CORE_API virtual bool MakeDirectory( const TCHAR* Path, bool Tree=0 ) override;
105 CORE_API virtual bool DeleteDirectory( const TCHAR* Path, bool RequireExists=0, bool Tree=0 ) override;
106
108
119 CORE_API virtual void FindFiles(TArray<FString>& FoundFiles, const TCHAR* Directory, const TCHAR* FileExtension = nullptr) override;
120
127 CORE_API bool IterateDirectory(const TCHAR* Directory, IPlatformFile::FDirectoryVisitor& Visitor) override;
128 CORE_API bool IterateDirectory(const TCHAR* Directory, IPlatformFile::FDirectoryVisitorFunc Visitor) override;
129
136 CORE_API bool IterateDirectoryRecursively(const TCHAR* Directory, IPlatformFile::FDirectoryVisitor& Visitor) override;
138
145 CORE_API bool IterateDirectoryStat(const TCHAR* Directory, IPlatformFile::FDirectoryStatVisitor& Visitor) override;
146 CORE_API bool IterateDirectoryStat(const TCHAR* Directory, IPlatformFile::FDirectoryStatVisitorFunc Visitor) override;
147
156
163 static CORE_API FString DefaultConvertToRelativePath( const TCHAR* Filename );
164
171 CORE_API FString ConvertToRelativePath( const TCHAR* Filename ) override;
172
179 CORE_API FString ConvertToAbsolutePathForExternalAppForRead( const TCHAR* Filename ) override;
180
187 CORE_API FString ConvertToAbsolutePathForExternalAppForWrite( const TCHAR* Filename ) override;
188
195 CORE_API int64 FileSize( const TCHAR* Filename ) override;
196
204 virtual bool SendMessageToServer(const TCHAR* Message, IPlatformFile::IFileServerMessageHandler* Handler) override
205 {
206 return GetLowLevel().SendMessageToServer(Message, Handler);
207 }
208
209private:
210 CORE_API FArchive * CreateFileReaderInternal(const TCHAR* Filename, uint32 ReadFlags, uint32 BufferSize);
211 CORE_API FArchive* CreateFileWriterInternal(const TCHAR* Filename, uint32 WriteFlags, uint32 BufferSize);
212
216 CORE_API uint32 CopyWithProgress(const TCHAR* InDestFile, const TCHAR* InSrcFile, bool ReplaceExisting, bool EvenIfReadOnly, bool Attributes, FCopyProgress* Progress, EFileRead ReadFlags, EFileWrite WriteFlags);
217
218 CORE_API void FindFilesRecursiveInternal( TArray<FString>& FileNames, const TCHAR* StartDirectory, const TCHAR* Filename, bool Files, bool Directories);
219};
220
221
222/*-----------------------------------------------------------------------------
223 FArchiveFileReaderGeneric
224-----------------------------------------------------------------------------*/
225
227{
228public:
231
232 CORE_API virtual void Seek( int64 InPos ) override final;
233 virtual int64 Tell() override final
234 {
235 return Pos;
236 }
237 virtual int64 TotalSize() override final
238 {
239 return Size;
240 }
241 CORE_API virtual bool Close() override final;
242 CORE_API virtual void Serialize( void* V, int64 Length ) override final;
243 virtual FString GetArchiveName() const override
244 {
245 return Filename;
246 }
247 CORE_API virtual void FlushCache() override final;
248
250
268
270 bool IsSilent() const
271 {
272 return !!(Flags & FILEREAD_Silent);
273 }
274
276 FString Filename;
289
290 enum
291 {
292 bPrecacheAsSoonAsPossible = 0 // Setting this to true makes it more likely bytes will be available without waiting due to external Precache calls, but at the cost of a larger number of read requests.
293 };
294
296};
297
298
299/*-----------------------------------------------------------------------------
300 FArchiveFileWriterGeneric
301-----------------------------------------------------------------------------*/
302
304{
305public:
308
309 CORE_API virtual void Seek( int64 InPos ) override final;
310 virtual int64 Tell() override final
311 {
312 return Pos;
313 }
314 CORE_API virtual int64 TotalSize() override;
315 CORE_API virtual bool Close() override final;
316 CORE_API virtual void Serialize( void* V, int64 Length ) override final;
317 CORE_API virtual void Flush() override final;
318 virtual FString GetArchiveName() const override
319 {
320 return Filename;
321 }
322
323protected:
329 CORE_API bool FlushBuffer();
335 CORE_API virtual bool SeekLowLevel(int64 InPos);
340 CORE_API virtual bool CloseLowLevel();
347 CORE_API virtual bool WriteLowLevel(const uint8* Src, int64 CountToWrite);
348
349 UE_DEPRECATED(5.6, "Pass in LastError from FPlatformMisc::GetLastError")
350 CORE_API void LogWriteError(const TCHAR* Message);
358 CORE_API void LogWriteError(const TCHAR* Message, uint32 LastError);
359
361 bool IsSilent() const
362 {
363 return !!(Flags & FILEWRITE_Silent);
364 }
365
367 FString Filename;
374};
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
#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 PLATFORM_DEBUG_FILE_WRITER_BUFFER_SIZE
Definition FileManagerGeneric.h:25
#define PLATFORM_FILE_WRITER_BUFFER_SIZE
Definition FileManagerGeneric.h:21
#define PLATFORM_FILE_READER_BUFFER_SIZE
Definition FileManagerGeneric.h:17
EFileWrite
Definition FileManager.h:15
@ FILEWRITE_None
Definition FileManager.h:16
@ FILEWRITE_Silent
Definition FileManager.h:22
EFileRead
Definition FileManager.h:27
@ FILEREAD_None
Definition FileManager.h:28
@ FILEREAD_Silent
Definition FileManager.h:30
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition FileManagerGeneric.h:227
friend class FArchiveFileReaderGenericTest
Definition FileManagerGeneric.h:295
uint32 Flags
Definition FileManagerGeneric.h:287
int64 BufferBase
Definition FileManagerGeneric.h:279
CORE_API ~FArchiveFileReaderGeneric()
Definition FileManagerGeneric.cpp:710
TUniquePtr< IFileHandle > Handle
Definition FileManagerGeneric.h:280
CORE_API bool InternalPrecache(int64 PrecacheOffset, int64 PrecacheSize)
Definition FileManagerGeneric.cpp:756
virtual CORE_API bool Close() override final
Definition FileManagerGeneric.cpp:737
virtual FString GetArchiveName() const override
Definition FileManagerGeneric.h:243
virtual CORE_API void CloseLowLevel()
Definition FileManagerGeneric.cpp:732
int64 Size
Definition FileManagerGeneric.h:277
int64 Pos
Definition FileManagerGeneric.h:278
virtual CORE_API void FlushCache() override final
Definition FileManagerGeneric.cpp:918
virtual int64 Tell() override final
Definition FileManagerGeneric.h:233
TArray64< uint8 > BufferArray
Definition FileManagerGeneric.h:285
int64 BufferSize
Definition FileManagerGeneric.h:286
virtual CORE_API bool Precache(int64 PrecacheOffset, int64 PrecacheSize) override
Definition FileManagerGeneric.cpp:743
FString Filename
Definition FileManagerGeneric.h:276
bool bFirstReadAfterSeek
Definition FileManagerGeneric.h:288
bool IsSilent() const
Definition FileManagerGeneric.h:270
@ bPrecacheAsSoonAsPossible
Definition FileManagerGeneric.h:292
virtual CORE_API bool SeekLowLevel(int64 InPos)
Definition FileManagerGeneric.cpp:727
virtual int64 TotalSize() override final
Definition FileManagerGeneric.h:237
virtual CORE_API void ReadLowLevel(uint8 *Dest, int64 CountToRead, int64 &OutBytesRead)
Definition FileManagerGeneric.cpp:715
Definition FileManagerGeneric.h:304
virtual CORE_API bool WriteLowLevel(const uint8 *Src, int64 CountToWrite)
Definition FileManagerGeneric.cpp:968
bool IsSilent() const
Definition FileManagerGeneric.h:361
bool bLoggingError
Definition FileManagerGeneric.h:373
virtual FString GetArchiveName() const override
Definition FileManagerGeneric.h:318
FString Filename
Definition FileManagerGeneric.h:367
CORE_API void LogWriteError(const TCHAR *Message)
Definition FileManagerGeneric.cpp:1052
virtual int64 Tell() override final
Definition FileManagerGeneric.h:310
int64 BufferSize
Definition FileManagerGeneric.h:372
virtual CORE_API bool SeekLowLevel(int64 InPos)
Definition FileManagerGeneric.cpp:956
TUniquePtr< IFileHandle > Handle
Definition FileManagerGeneric.h:370
int64 Pos
Definition FileManagerGeneric.h:369
CORE_API ~FArchiveFileWriterGeneric()
Definition FileManagerGeneric.cpp:945
virtual CORE_API void Flush() override final
Definition FileManagerGeneric.cpp:1027
virtual CORE_API bool Close() override final
Definition FileManagerGeneric.cpp:985
virtual CORE_API int64 TotalSize() override
Definition FileManagerGeneric.cpp:961
TArray64< uint8 > BufferArray
Definition FileManagerGeneric.h:371
virtual CORE_API bool CloseLowLevel()
Definition FileManagerGeneric.cpp:950
CORE_API bool FlushBuffer()
Definition FileManagerGeneric.cpp:1035
uint32 Flags
Definition FileManagerGeneric.h:368
Definition Archive.h:1208
Definition FileManagerGeneric.h:37
FFileManagerGeneric()
Definition FileManagerGeneric.h:49
CORE_API double GetFileAgeSeconds(const TCHAR *Filename) override
Definition FileManagerGeneric.cpp:542
CORE_API int64 FileSize(const TCHAR *Filename) override
Definition FileManagerGeneric.cpp:131
virtual CORE_API bool MakeDirectory(const TCHAR *Path, bool Tree=0) override
Definition FileManagerGeneric.cpp:369
virtual CORE_API FFileStatData GetStatData(const TCHAR *FilenameOrDirectory) override
Definition FileManagerGeneric.cpp:405
static CORE_API FString DefaultConvertToRelativePath(const TCHAR *Filename)
Definition FileManagerGeneric.cpp:588
CORE_API FString ConvertToAbsolutePathForExternalAppForWrite(const TCHAR *Filename) override
Definition FileManagerGeneric.cpp:640
virtual ~FFileManagerGeneric()
Definition FileManagerGeneric.h:54
virtual CORE_API FString GetFilenameOnDisk(const TCHAR *Filename) override
Definition FileManagerGeneric.cpp:583
CORE_API FDateTime GetTimeStamp(const TCHAR *Filename) override
Definition FileManagerGeneric.cpp:554
FArchive * CreateFileReader(const TCHAR *Filename, uint32 ReadFlags=0) override
Definition FileManagerGeneric.h:72
CORE_API bool IsReadOnly(const TCHAR *Filename) override
Definition FileManagerGeneric.cpp:294
CORE_API void GetTimeStampPair(const TCHAR *PathA, const TCHAR *PathB, FDateTime &OutTimeStampA, FDateTime &OutTimeStampB)
Definition FileManagerGeneric.cpp:560
CORE_API bool IterateDirectoryStatRecursively(const TCHAR *Directory, IPlatformFile::FDirectoryStatVisitor &Visitor) override
Definition FileManagerGeneric.cpp:532
virtual CORE_API bool DeleteDirectory(const TCHAR *Path, bool RequireExists=0, bool Tree=0) override
Definition FileManagerGeneric.cpp:381
CORE_API bool IterateDirectory(const TCHAR *Directory, IPlatformFile::FDirectoryVisitor &Visitor) override
Definition FileManagerGeneric.cpp:502
virtual void SetSandboxEnabled(bool bInEnabled) override
Definition FileManagerGeneric.h:62
CORE_API bool DirectoryExists(const TCHAR *InDirectory) override
Definition FileManagerGeneric.cpp:364
CORE_API bool IterateDirectoryRecursively(const TCHAR *Directory, IPlatformFile::FDirectoryVisitor &Visitor) override
Definition FileManagerGeneric.cpp:512
CORE_API bool FileExists(const TCHAR *Filename) override
Definition FileManagerGeneric.cpp:359
virtual CORE_API void ProcessCommandLineOptions() override
Definition FileManagerGeneric.cpp:32
CORE_API bool IterateDirectoryStat(const TCHAR *Directory, IPlatformFile::FDirectoryStatVisitor &Visitor) override
Definition FileManagerGeneric.cpp:522
virtual bool IsSandboxEnabled() const override
Definition FileManagerGeneric.h:67
CORE_API void FindFilesRecursive(TArray< FString > &FileNames, const TCHAR *StartDirectory, const TCHAR *Filename, bool Files, bool Directories, bool bClearFileNames=true) override
Definition FileManagerGeneric.cpp:645
virtual bool SendMessageToServer(const TCHAR *Message, IPlatformFile::IFileServerMessageHandler *Handler) override
Definition FileManagerGeneric.h:204
CORE_API void FindFiles(TArray< FString > &Result, const TCHAR *Filename, bool Files, bool Directories) override
Definition FileManagerGeneric.cpp:455
CORE_API bool Move(const TCHAR *Dest, const TCHAR *Src, bool Replace=1, bool EvenIfReadOnly=0, bool Attributes=0, bool bDoNotRetryOrError=0) override
Definition FileManagerGeneric.cpp:299
CORE_API bool SetTimeStamp(const TCHAR *Filename, FDateTime Timestamp) override
Definition FileManagerGeneric.cpp:565
CORE_API FString ConvertToRelativePath(const TCHAR *Filename) override
Definition FileManagerGeneric.cpp:630
CORE_API FDateTime GetAccessTimeStamp(const TCHAR *Filename) override
Definition FileManagerGeneric.cpp:577
FArchive * CreateFileWriter(const TCHAR *Filename, uint32 WriteFlags=0) override
Definition FileManagerGeneric.h:77
CORE_API FString ConvertToAbsolutePathForExternalAppForRead(const TCHAR *Filename) override
Definition FileManagerGeneric.cpp:635
CORE_API IPlatformFile & GetPlatformFile()
Definition PlatformFileManager.cpp:22
static CORE_API FPlatformFileManager & Get()
Definition PlatformFileManager.cpp:185
Definition GenericPlatformFile.h:117
Definition FileManager.h:57
Definition GenericPlatformFile.h:623
Definition GenericPlatformFile.h:576
Definition GenericPlatformFile.h:925
Definition GenericPlatformFile.h:342
virtual bool IsSandboxEnabled() const
Definition GenericPlatformFile.h:366
virtual void SetSandboxEnabled(bool bInEnabled)
Definition GenericPlatformFile.h:357
virtual bool SendMessageToServer(const TCHAR *Message, IFileServerMessageHandler *Handler)
Definition GenericPlatformFile.h:944
Definition Array.h:670
Definition UniquePtr.h:107
Definition FileManager.h:44
Definition DateTime.h:76
Definition GenericPlatformFile.h:195