class · System.IO

FileStream

public class FileStream : Stream

A file read and written in ranges of bytes, at a position, through a buffer.

Tipo
class
Espacio de nombres
System.IO
Ensamblado
System.Core
Acceso
public
Archivo fuente
Stream.ant

Herencia

Clases base
Any Stream FileStream

Constructores

new(str path, FileMode mode)
#
new(str path, FileMode mode, FileAccess access)
#
new(str path, FileMode mode, FileAccess access, i32 bufferSize)
#

Propiedades

str Name { get; }
#

read-only

The path it was opened with.

override bool CanRead { get; }
#

read-only

override bool CanWrite { get; }
#

read-only

override bool CanSeek { get; }
#

read-only

override i64 Length { get; }
#

read-only

override i64 Position { get; set; }
#

Métodos

override Read(u8[] buffer, i32 offset, i32 count) : i32
#

override

override ReadByte() : i32
#

override

override Write(u8[] buffer, i32 offset, i32 count)
#

override

override WriteByte(u8 value)
#

override

override Seek(i64 offset, SeekOrigin origin) : i64
#

override

Seek(i64 offset, i32 origin) : i64
#

Moves to offset from the start (0), the position (1) or the end (2): the new position.

override Flush()
#

override

override Close()
#

override

Miembros privados e internos (5)

BufferedStream buffered
#

private

str path
#

private

bool reads
#

private

bool writes
#

private

static extern("stream.open") OpenAt(u16[] path, i64 mode) : i64
#

private static

Miembros heredados (12)

Código fuente

FileStream en Antril, descompilado a partir de su Larva HIR.

System.IO.FileStream.ant
// System.IO.FileStream — System.Core (decompiled from Larva HIR)

import System;

into namespace System.IO
{
	/// A file read and written in ranges of bytes, at a position, through a buffer.
	public class FileStream : Stream
	{
		BufferedStream buffered;
		str path;
		bool reads;
		bool writes;

		static extern("stream.open") OpenAt(u16[] path, i64 mode) : i64;

		public:
			new(str path, FileMode mode) : (path, mode, mode == FileMode.Append ? FileAccess.Write : mode == FileMode.Open ? FileAccess.Read : FileAccess.ReadWrite)
			{
			}

			new(str path, FileMode mode, FileAccess access) : (path, mode, access, 4096)
			{
			}

			new(str path, FileMode mode, FileAccess access, i32 bufferSize)
			{
				this.path = path;
				i64 bits = access == FileAccess.Read ? 1 : access == FileAccess.Write ? 2 : 3;
				if (mode == FileMode.Create)
					bits = bits | 4 | 8;
				else if (mode == FileMode.CreateNew)
					bits = bits | 4 | 32;
				else if (mode == FileMode.OpenOrCreate)
					bits = bits | 4;
				else if (mode == FileMode.Truncate)
					bits = bits | 8;
				else if (mode == FileMode.Append)
					bits = bits | 2 | 4 | 16;
				i64 handle = OpenAt(Unicode.ToUtf16(path), bits);
				if (handle < 0)
					throw new IOError("cannot open " + path);
				reads = access != FileAccess.Write;
				writes = access != FileAccess.Read;
				buffered = new BufferedStream(new HandleStream(handle, path, reads, writes, true), bufferSize);
			}

			override Read(u8[] buffer, i32 offset, i32 count) : i32
			{
				if (!reads)
					throw new IOError("the file was not opened for reading: " + path);
				return buffered.Read(buffer, offset, count);
			}

			override ReadByte() : i32 => buffered.ReadByte();

			override Write(u8[] buffer, i32 offset, i32 count)
			{
				if (!writes)
					throw new IOError("the file was not opened for writing: " + path);
				buffered.Write(buffer, offset, count);
			}

			override WriteByte(u8 value)
			{
				buffered.WriteByte(value);
			}

			override Seek(i64 offset, SeekOrigin origin) : i64 => buffered.Seek(offset, origin);

			/// Moves to `offset` from the start (0), the position (1) or the end (2): the new position.
			Seek(i64 offset, i32 origin) : i64
			{
				return buffered.Seek(offset, origin == 0 ? SeekOrigin.Begin : origin == 1 ? SeekOrigin.Current : SeekOrigin.End);
			}

			override Flush()
			{
				buffered.Flush();
			}

			override Close()
			{
				buffered.Close();
			}

			/// The path it was opened with.
			str Name
			{
				get => path;
			}

			override bool CanRead
			{
				get => buffered.CanRead;
			}

			override bool CanWrite
			{
				get => buffered.CanWrite;
			}

			override bool CanSeek
			{
				get => buffered.CanSeek;
			}

			override i64 Length
			{
				get => buffered.Length;
			}

			override i64 Position
			{
				get => buffered.Position;
				set
				{
					buffered.Position = value;
				}
			}
	}
}
Esc