Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CreateFromFile() [6/6]

static MemoryMappedFile System.IO.MemoryMappedFiles.MemoryMappedFile.CreateFromFile ( string path,
FileMode mode,
string? mapName,
long capacity,
MemoryMappedFileAccess access )
inlinestatic

Definition at line 86 of file MemoryMappedFile.cs.

87 {
88 if (path == null)
89 {
90 throw new ArgumentNullException("path");
91 }
92 if (mapName != null && mapName.Length == 0)
93 {
95 }
96 if (capacity < 0)
97 {
98 throw new ArgumentOutOfRangeException("capacity", System.SR.ArgumentOutOfRange_PositiveOrDefaultCapacityRequired);
99 }
100 if (access < MemoryMappedFileAccess.ReadWrite || access > MemoryMappedFileAccess.ReadWriteExecute)
101 {
102 throw new ArgumentOutOfRangeException("access");
103 }
104 switch (mode)
105 {
106 case FileMode.Append:
108 case FileMode.Truncate:
110 default:
111 {
112 if (access == MemoryMappedFileAccess.Write)
113 {
115 }
116 bool existed = File.Exists(path);
117 FileStream fileStream = new FileStream(path, mode, GetFileAccess(access), FileShare.Read, 4096, FileOptions.None);
118 if (capacity == 0L && fileStream.Length == 0L)
119 {
120 CleanupFile(fileStream, existed, path);
122 }
123 if (capacity == 0L)
124 {
125 capacity = fileStream.Length;
126 }
127 SafeMemoryMappedFileHandle safeMemoryMappedFileHandle = null;
128 try
129 {
130 safeMemoryMappedFileHandle = CreateCore(fileStream, mapName, HandleInheritability.None, access, MemoryMappedFileOptions.None, capacity);
131 }
132 catch
133 {
134 CleanupFile(fileStream, existed, path);
135 throw;
136 }
137 return new MemoryMappedFile(safeMemoryMappedFileHandle, fileStream, leaveOpen: false);
138 }
139 }
140 }
MemoryMappedFile(SafeMemoryMappedFileHandle handle)
static void CleanupFile(FileStream fileStream, bool existed, string path)
static SafeMemoryMappedFileHandle CreateCore(FileStream fileStream, string mapName, HandleInheritability inheritability, MemoryMappedFileAccess access, MemoryMappedFileOptions options, long capacity)
static FileAccess GetFileAccess(MemoryMappedFileAccess access)
static string Argument_NewMMFWriteAccessNotAllowed
Definition SR.cs:42
static string Argument_NewMMFTruncateModeNotAllowed
Definition SR.cs:48
static string Argument_MapNameEmptyString
Definition SR.cs:38
static string ArgumentOutOfRange_PositiveOrDefaultCapacityRequired
Definition SR.cs:58
static string Argument_NewMMFAppendModeNotAllowed
Definition SR.cs:46
static string Argument_EmptyFile
Definition SR.cs:40
Definition SR.cs:7

References System.IO.MemoryMappedFiles.MemoryMappedFile.MemoryMappedFile(), System.SR.Argument_EmptyFile, System.SR.Argument_MapNameEmptyString, System.SR.Argument_NewMMFAppendModeNotAllowed, System.SR.Argument_NewMMFTruncateModeNotAllowed, System.SR.Argument_NewMMFWriteAccessNotAllowed, System.SR.ArgumentOutOfRange_PositiveOrDefaultCapacityRequired, System.capacity, System.IO.MemoryMappedFiles.MemoryMappedFile.CleanupFile(), System.IO.MemoryMappedFiles.MemoryMappedFile.CreateCore(), System.IO.File.Exists(), System.IO.MemoryMappedFiles.MemoryMappedFile.GetFileAccess(), System.L, and System.IO.FileStream.Length.