public void ReOpenFileSuccess() { string path = Path.Combine(TemporaryDirectory, "file"); using (var stream = new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { SafeFileHandle writableHandle; ReOpenFileStatus status = FileUtilities.TryReOpenFile( stream.SafeFileHandle, FileDesiredAccess.GenericWrite, FileShare.ReadWrite, FileFlagsAndAttributes.None, out writableHandle); using (writableHandle) { XAssert.AreEqual(ReOpenFileStatus.Success, status); XAssert.IsNotNull(writableHandle); XAssert.IsFalse(writableHandle.IsInvalid); using (var writableStream = new FileStream(writableHandle, FileAccess.Write, bufferSize: 128, isAsync: false)) { writableStream.WriteByte(0xab); } } int read = stream.ReadByte(); XAssert.AreEqual(0xab, read); } }
public void ReOpenFileSharingViolation() { string path = Path.Combine(TemporaryDirectory, "file"); using (var stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read)) { SafeFileHandle writableHandle; ReOpenFileStatus status = FileUtilities.TryReOpenFile( stream.SafeFileHandle, FileDesiredAccess.GenericWrite, FileShare.ReadWrite, FileFlagsAndAttributes.None, out writableHandle); using (writableHandle) { XAssert.AreEqual(ReOpenFileStatus.SharingViolation, status); XAssert.IsNull(writableHandle); } } }