public static FileStream Open(FileDataStream ads, FileMode mode, FileAccess access, FileShare share) { if (ads.Type != FileDataStreamType.Data) { throw new InvalidOperationException("Only $DATA streams can be opened for reading or writing."); } if (ads.Name.Length == 0) // default stream { return(ads.File.Open(mode, access, share)); } var(nmode, nflags) = ManagedToNative(mode); var naccess = ManagedToNative(access); var nshare = ManagedToNative(share); var lpFileName = $"{ads.File.FullName}:{ads.Name}"; var hFile = Interop.CreateFileW(lpFileName, naccess, nshare, IntPtr.Zero, nmode, nflags, IntPtr.Zero); if (hFile == Interop.INVALID_HANDLE_VALUE) { ThrowErrorAsException(Marshal.GetLastWin32Error(), lpFileName); return(null); } return(new FileStream(new SafeFileHandle(hFile, true), access, 4096, true)); }
public static void Delete(FileDataStream ads) { if (ads.Type != FileDataStreamType.Data) { throw new InvalidOperationException("Only $DATA streams can be deleted."); } if (ads.Name.Length == 0) // default stream { ads.File.Delete(); return; } var lpFileName = $"{ads.File.FullName}:{ads.Name}"; if (!Interop.DeleteFileW(lpFileName)) { ThrowErrorAsException(Marshal.GetLastWin32Error(), lpFileName); } }