@@ -309,37 +309,45 @@ public unsafe bool TryGetLocalFile(string eKey, out ReadOnlySpan<byte> data)
309309 var archivePath = Path . Combine ( Settings . BaseDir , "Data" , "data" , "data." + archiveIndex . ToString ( ) . PadLeft ( 3 , '0' ) ) ;
310310 var archiveLength = new FileInfo ( archivePath ) . Length ;
311311
312- using ( var archive = MemoryMappedFile . CreateFromFile ( archivePath , FileMode . Open , null , 0 , MemoryMappedFileAccess . Read ) )
313- using ( var accessor = archive . CreateViewAccessor ( 0 , 0 , MemoryMappedFileAccess . Read ) )
314- using ( var mmapViewHandle = accessor . SafeMemoryMappedViewHandle )
312+ try
315313 {
316- byte * ptr = null ;
317- try
314+ using ( var archive = MemoryMappedFile . CreateFromFile ( archivePath , FileMode . Open , null , 0 , MemoryMappedFileAccess . Read ) )
315+ using ( var accessor = archive . CreateViewAccessor ( 0 , 0 , MemoryMappedFileAccess . Read ) )
316+ using ( var mmapViewHandle = accessor . SafeMemoryMappedViewHandle )
318317 {
319- mmapViewHandle . AcquirePointer ( ref ptr ) ;
318+ byte * ptr = null ;
319+ try
320+ {
321+ mmapViewHandle . AcquirePointer ( ref ptr ) ;
322+
323+ if ( archiveOffset + archiveSize > archiveLength )
324+ {
325+ Console . WriteLine ( "Skipping local file read: " + archiveOffset + " + " + archiveSize + " > " + archiveLength + " for archive " + "data." + archiveIndex . ToString ( ) . PadLeft ( 3 , '0' ) ) ;
326+ data = null ;
327+ return false ;
328+ }
320329
321- if ( archiveOffset + archiveSize > archiveLength )
330+ data = new ReadOnlySpan < byte > ( ptr + archiveOffset , archiveSize ) . ToArray ( ) ;
331+ return true ;
332+ }
333+ catch ( Exception e )
322334 {
323- Console . WriteLine ( "Skipping local file read : " + archiveOffset + " + " + archiveSize + " > " + archiveLength + " for archive " + "data." + archiveIndex . ToString ( ) . PadLeft ( 3 , '0' ) ) ;
335+ Console . WriteLine ( "Failed to read local file: " + e . Message ) ;
324336 data = null ;
325337 return false ;
326338 }
327-
328- data = new ReadOnlySpan < byte > ( ptr + archiveOffset , archiveSize ) . ToArray ( ) ;
329- return true ;
330- }
331- catch ( Exception e )
332- {
333- Console . WriteLine ( "Failed to read local file: " + e . Message ) ;
334- data = null ;
335- return false ;
336- }
337- finally
338- {
339- mmapViewHandle . ReleasePointer ( ) ;
339+ finally
340+ {
341+ mmapViewHandle . ReleasePointer ( ) ;
342+ }
340343 }
341344 }
345+ catch ( Exception e )
346+ {
347+ Console . WriteLine ( "Failed to read local file (make sure it is not in use): " + e . Message ) ;
348+ }
342349 }
350+
343351 data = null ;
344352 return false ;
345353 }
0 commit comments