/// <summary> /// Creates a memory-mapped file from a file on disk. /// </summary> /// <param name="path">The path to file to map.</param> /// <returns>A memory-mapped file.</returns> public static FileMappingWrapper CreateFromFile(string path) { if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException("path wrong"); } if (!File.Exists(path)) { throw new ArgumentNullException("file doesn't exists"); } using (var file = File.Open(path, FileMode.Open, FileAccess.ReadWrite)) { FileMappingAccess rights = new FileMappingAccess(); FileMappingSecurity security = new FileMappingSecurity(); return(CreateFromFile( file, Guid.NewGuid().ToString(), file.Length, rights, security, HandleInheritability.Inheritable, true // TODO: уточнить )); } }
/// <summary> /// /// </summary> /// <param name="fileStream"></param> /// <param name="mapName"></param> /// <param name="capacity"></param> /// <param name="access"></param> /// <param name="memoryMappedFileSecurity"></param> /// <param name="inheritability"></param> /// <param name="leaveOpen"></param> /// <returns></returns> public static FileMappingWrapper CreateFromFile( FileStream fileStream, string mapName, long capacity, FileMappingAccess access, FileMappingSecurity memoryMappedFileSecurity, HandleInheritability inheritability, bool leaveOpen ) { if (fileStream == null || fileStream.SafeFileHandle.IsInvalid || string.IsNullOrEmpty(mapName)) { throw new ArgumentNullException("fileStream or mapname is null"); } SafeFileMappingHandle handle = new SafeFileMappingHandle(Win32.CreateFileMapping( fileStream.SafeFileHandle, IntPtr.Zero, Win32.PAGE_READWRITE, 0, unchecked ((UInt32)capacity), mapName ) ); if (handle.IsInvalid) { throw new Exception("Could not create memory-mapped file."); } // throws // ArgumentException // ArgumentNullException // ArgumentOutOfRangeException // ObjectDisposedException // UnauthorizedAccessException // IOException var wrapper = new FileMappingWrapper(handle); wrapper.fileSize = fileStream.Length; return(wrapper); }
public static extern SafeViewOfFileHandle MapViewOfFile(SafeFileMappingHandle hFileMappingObject, [MarshalAs(UnmanagedType.U4)] FileMappingAccess dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, uint dwNumberOfBytesToMap);
public static extern SafeFileMappingHandle OpenFileMapping([MarshalAs(UnmanagedType.U4)] FileMappingAccess dwDesiredAccess, bool bInheritHandle, string lpName);