UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
FileSystem.fake.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5#include "Misc/Paths.h"
6#include "Misc/ScopeLock.h"
7
8#if WITH_DEV_AUTOMATION_TESTS
9
10namespace BuildPatchServices
11{
16 class FFakeFileReader
17 : public FMemoryArchive
18 {
19 public:
20 FFakeFileReader(const TArray<uint8>& InBytes)
21 : Bytes(InBytes)
23 {
24 this->SetIsLoading(true);
25 }
26
27 virtual FString GetArchiveName() const
28 {
29 return TEXT("FFakeFileReader");
30 }
31
32 virtual int64 TotalSize() override
33 {
34 return FakeTotalSize;
35 }
36
37 void Serialize(void* Data, int64 Num)
38 {
39 if (Num && !IsError())
40 {
41 if (Offset + Num <= TotalSize())
42 {
44 Offset += Num;
45 }
46 else
47 {
48 SetError();
49 }
50 }
51 }
52
53 public:
54 const TArray<uint8>& Bytes;
56 };
57
58 class FFakeFileSystem
59 : public FMockFileSystem
60 {
61 public:
62 virtual TUniquePtr<FArchive> CreateFileReader(const TCHAR* Filename, EReadFlags ReadFlags = EReadFlags::None) const override
63 {
66 {
67 Reader = CreateFileReaderFunc(Filename, ReadFlags);
68 }
69 else
70 {
71 FString NormalizedFilename = Filename;
72 FPaths::NormalizeFilename(NormalizedFilename);
73 NormalizedFilename = FPaths::ConvertRelativePathToFull(TEXT(""), MoveTemp(NormalizedFilename));
74 FScopeLock ScopeLock(&ThreadLock);
75 if (DiskData.Contains(NormalizedFilename) && !DiskDataOpenFailure.Contains(NormalizedFilename))
76 {
77 Reader.Reset(new FFakeFileReader(DiskData[NormalizedFilename]));
78 }
79 }
80 RxCreateFileReader.Emplace(FStatsCollector::GetSeconds(), Reader.Get(), Filename, ReadFlags);
81 return Reader;
82 }
83
84 virtual TUniquePtr<FArchive> CreateFileWriter(const TCHAR* Filename, EWriteFlags WriteFlags = EWriteFlags::None) const override
85 {
88 {
89 Writer = CreateFileWriterFunc(Filename, WriteFlags);
90 }
91 else
92 {
93 FString NormalizedFilename = Filename;
94 FPaths::NormalizeFilename(NormalizedFilename);
95 NormalizedFilename = FPaths::ConvertRelativePathToFull(TEXT(""), MoveTemp(NormalizedFilename));
96 FScopeLock ScopeLock(&ThreadLock);
97 Writer.Reset(new FMemoryWriter(DiskData.FindOrAdd(NormalizedFilename)));
98 }
99 RxCreateFileWriter.Emplace(FStatsCollector::GetSeconds(), Writer.Get(), Filename, WriteFlags);
100 return Writer;
101 }
102
103 bool DeleteFile(const TCHAR* Filename) const
104 {
105 FString NormalizedFilename = Filename;
106 FPaths::NormalizeFilename(NormalizedFilename);
107 NormalizedFilename = FPaths::ConvertRelativePathToFull(TEXT(""), MoveTemp(NormalizedFilename));
108 FScopeLock ScopeLock(&ThreadLock);
109 DiskData.Remove(NormalizedFilename);
110 return true;
111 }
112
113 virtual bool GetFileSize(const TCHAR* Filename, int64& OutFileSize) const override
114 {
115 FScopeLock ScopeLock(&ThreadLock);
116 OutFileSize = -1;
117 if (DiskData.Contains(Filename))
118 {
119 OutFileSize = DiskData[Filename].Num();
120 }
121 RxGetFileSize.Emplace(FStatsCollector::GetSeconds(), Filename, OutFileSize);
122 return OutFileSize >= 0;
123 }
124
125 virtual bool FileExists(const TCHAR* Filename) const override
126 {
127 return DiskData.Contains(Filename) || DiskDataOpenFailure.Contains(Filename);
128 }
129
130 public:
133
136 };
137}
138
139#endif //WITH_DEV_AUTOMATION_TESTS
#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::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ Num
Definition MetalRHIPrivate.h:234
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition MemoryArchive.h:15
Definition MemoryWriter.h:101
static CORE_API void NormalizeFilename(FString &InPath)
Definition Paths.cpp:1334
static CORE_API FString ConvertRelativePathToFull(const FString &InPath)
Definition Paths.cpp:1586
Definition ScopeLock.h:141
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
void Reset(T *InPtr=nullptr)
Definition UniquePtr.h:346
UE_FORCEINLINE_HINT T * Get() const
Definition UniquePtr.h:324
Definition BuildPatchFileConstructor.h:28
@ DeleteFile
Definition NetworkMessage.h:35
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160