public Stream IncreaseSize(int value, out long offset) { lock (_lock) { while (Interlocked.Read(ref _counter) != 0) { if (!Monitor.Wait(_lock, 10000, true)) throw new NotSupportedException(); } FileStream file = new FileStream(_filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); try { offset = MathEx.RoundUp(file.Length, 0x800); file.SetLength(offset + value); _mmf = MemoryMappedFile.CreateFromFile(file, null, 0, MemoryMappedFileAccess.ReadWrite, null, HandleInheritability.Inheritable, false); } catch { file.SafeDispose(); throw; } Interlocked.Increment(ref _counter); DisposableStream result = new DisposableStream(_mmf.CreateViewStream(offset, value, MemoryMappedFileAccess.ReadWrite)); result.AfterDispose.Add(new DisposableAction(Free)); return result; } }
public Stream CreateViewStream() { IDisposable context = Acquire(); DisposableStream result = new DisposableStream(_mmf.CreateViewStream(0L, 0L, MemoryMappedFileAccess.ReadWrite)); result.AfterDispose.Add(context); return result; }
public Stream CreateViewStream(long offset, long size, MemoryMappedFileAccess access) { IDisposable context = Acquire(); DisposableStream result = new DisposableStream(_mmf.CreateViewStream(offset, size, access)); result.AfterDispose.Add(context); return result; }
public Stream IncreaseSize(int value, out long offset) { lock (_lock) { while (Interlocked.Read(ref _counter) != 0) { if (!Monitor.Wait(_lock, 10000, true)) { throw new NotSupportedException(); } } FileStream file = new FileStream(_filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); try { offset = MathEx.RoundUp(file.Length, 0x800); file.SetLength(offset + value); _mmf = MemoryMappedFile.CreateFromFile(file, null, 0, MemoryMappedFileAccess.ReadWrite, null, HandleInheritability.Inheritable, false); } catch { file.SafeDispose(); throw; } Interlocked.Increment(ref _counter); DisposableStream result = new DisposableStream(_mmf.CreateViewStream(offset, value, MemoryMappedFileAccess.ReadWrite)); result.AfterDispose.Add(new DisposableAction(Free)); return(result); } }
public Stream CreateViewStream(long offset, long size, MemoryMappedFileAccess access) { IDisposable context = Acquire(); DisposableStream result = new DisposableStream(_mmf.CreateViewStream(offset, size, access)); result.AfterDispose.Add(context); return(result); }
private Stream Acquire(Stream stream) { try { Interlocked.Increment(ref _counter); DisposableStream result = new DisposableStream(stream); result.AfterDispose.Add(new DisposableAction(Dispose)); return(result); } catch { stream.SafeDispose(); throw; } }
private Stream Acquire(Stream stream) { try { Interlocked.Increment(ref _counter); DisposableStream result = new DisposableStream(stream); result.AfterDispose.Add(new DisposableAction(Dispose)); return result; } catch { stream.SafeDispose(); throw; } }
public static void CreatePipe(long capacity, out Stream input, out Stream output) { using (DisposableStack insurance = new DisposableStack(3)) { Flute flute = insurance.Add(new Flute(capacity)); Stream writer = insurance.Add(flute.AcquireWriter(0, capacity)); Stream reader = insurance.Add(flute.AcquireReader(0, capacity)); DisposableStream disposableOutput = new DisposableStream(reader); disposableOutput.AfterDispose.Add(flute); disposableOutput.AfterDispose.Add(writer); input = writer; output = disposableOutput; insurance.Clear(); } }
public static void CreatePipe(long capacity, out Stream input, out Stream output) { using (DisposableStack insurance = new DisposableStack(3)) { Flute flute = insurance.Add(new Flute(capacity)); Stream writer = insurance.Add(flute.AcquireWriter(0, capacity)); Stream reader = insurance.Add(flute.AcquireReader(0, capacity)); DisposableStream disposableOutput = new DisposableStream(reader); disposableOutput.AfterDispose.Add(flute); disposableOutput.AfterDispose.Add(writer); input = writer; output = disposableOutput; insurance.Clear(); } }
private Stream OpenOutputStream(ArchiveEntry entry) { MemoryStream ms = new MemoryStream((int)(entry.UncompressedSize * 1.3)); DisposableStream writer = new DisposableStream(ms); writer.BeforeDispose.Add(new DisposableAction(() => _listing.Accessor.OnWritingCompleted(entry, ms, _compression))); return writer; }