C# FileStream tutorial
last modified January 19, 2021
C# FileStream tutorial shows how to read & write files in C# with FileStream. C# tutorial is a comprehensive tutorial on C# language.
C# FileStream
FileStream
provides a Stream
for a file, supporting
both synchronous and asynchronous read and write operations. A stream is a flow
of data from a source into a destination. The source or destination can be a
disk, memory, socket, or other programs.
When we use FileStream
, we work with bytes. For more convenient
work with text data, we can use StreamWriter
and
StreamReader
.
C# FileStream write text
In the following example, we write text data into a file with
FileStream
.
using System; using System.IO; using System.Text; var fileName = @"C:\Users\Jano\Documents\words.txt"; using FileStream fs = File.OpenWrite(fileName); var data = "falcon\nhawk\nforest\ncloud\nsky"; byte[] bytes = Encoding.UTF8.GetBytes(data); fs.Write(bytes, 0, bytes.Length);
The example writes a couple of words into a text file.
using FileStream fs = File.OpenWrite(fileName);
The File.OpenWrite
method opens a FileStream
in a
writing mode.
var data = "falcon\nhawk\nforest\ncloud\nsky"; byte[] bytes = Encoding.UTF8.GetBytes(data);
We have text data which we transform into bytes with
Encoding.UTF8.GetBytes
.
fs.Write(bytes, 0, bytes.Length);
The bytes are written to the FileStream
with Write
.
C# FileStream write text with StreamWriter
In the following example, we use FileStream
in combination with
StreamWriter
.
using System; using System.IO; var fileName = @"C:\Users\Jano\Documents\words.txt"; using FileStream fs = File.Create(fileName); using var sr = new StreamWriter(fs); sr.WriteLine("coin\nfalcon\nhawk\nforest"); Console.WriteLine("done");
The example writes text data into a file. For convenience, we use the
StreamWriter
, which writes characters to a stream in a particular
encoding.
using FileStream fs = File.Create(fileName); using var sr = new StreamWriter(fs);
A StreamWriter
is created; it takes the FileStream
as a parameter.
sr.WriteLine("coin\nfalcon\nhawk\nforest");
A line of text is written to the FileStream
with
WriteLine
.
C# FileStream read text
In the following example, we read data from a text file with FileStream
.
using System; using System.IO; using System.Text; var fileName = @"C:\Users\Jano\Documents\words.txt"; using FileStream fs = File.OpenRead(fileName); byte[] buf = new byte[1024]; int c; while ((c = fs.Read(buf, 0, buf.Length)) > 0) { Console.WriteLine(Encoding.UTF8.GetString(buf, 0, c)); }
The example reads a text file and prints its contents. We read the data as bytes, transform them into strings using UTF8 encoding and finally, write the strings to the console.
using FileStream fs = File.OpenRead(fileName);
With File.OpenRead
we open a file for reading. The method returns
a FileStream
.
byte[] buf = new byte[1024];
The buf
is a byte
array into which we read the data
from the file.
while ((c = fs.Read(buf, 0, buf.Length)) > 0) { Console.WriteLine(Encoding.UTF8.GetString(buf, 0, c)); }
The FileStream's
Read
method reads a block of bytes
from the stream and writes the data in a given buffer. The first argument is the
byte offset in array at which the read bytes will be placed. The second is the
maximum number of bytes to read. The Encoding.UTF8.GetString
decodes all the bytes in the specified byte array into a string.
C# FileStream read text with StreamReader
In the following example, we use FileStream
in combination with
StreamReader
.
using System; using System.IO; var fileName = @"C:\Users\Jano\Documents\words.txt"; using FileStream fs = File.OpenRead(fileName); using var sr = new StreamReader(fs); string line; while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); }
In the example, we read a text file. When we use StreamReader
, we
do not need to do the decoding of bytes into characters.
using FileStream fs = File.OpenRead(fileName); using var sr = new StreamReader(fs);
We pass the FileStream
to the StreamReader
. If we do
not explicitly specify the encoding, the default UTF8 is used.
string line; while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); }
We read the data with the StreamReader's
WriteLine
method. It returns the next line from the input stream, or null
if
the end of the input stream is reached.
C# FileStream download image
In the following example, we download a small image file.
using System; using System.IO; using System.Net.Http; using System.Threading.Tasks; using var httpClient = new HttpClient(); var url = "http://webcode.me/favicon.ico"; byte[] imageBytes = await httpClient.GetByteArrayAsync(url); using var fs = new FileStream("favicon.ico", FileMode.Create); fs.Write(imageBytes, 0, imageBytes.Length); Console.WriteLine("Image downloaded");
The example uses the HttpClient
to download a small image file.
The image is retrieved as an array of bytes. The bytes are then written to
a FileStream
.
using var fs = new FileStream("favicon.ico", FileMode.Create); fs.Write(imageBytes, 0, imageBytes.Length);
We create a new file for writing. The bytes are written to the newly created
file with the Write
method.
C# FileStream read image
In the next example, we read an image file. We output the file as hexadecimal data.
using System; using System.IO; var fileName = @"C:\Users\Jano\Documents\favicon.ico"; using var fs = new FileStream(fileName, FileMode.Open); int c; int i = 0; while ((c = fs.ReadByte()) != -1) { Console.Write("{0:X2} ", c); i++; if (i % 10 == 0) { Console.WriteLine(); } }
The example outputs a small image in hexadecimal notation.
while ((c = fs.ReadByte()) != -1) {
The ReadByte
method reads a byte from the file and advances
the read position one byte. It returns the byte, cast to an Int32
,
or -1
if the end of the stream has been reached. It is OK to
read the image by one byte since we deal with a very small image.
Console.Write("{0:X2} ", c);
The {0:X2}
outputs the bytes in hexadecimal notation.
if (i % 10 == 0) { Console.WriteLine(); }
We write a new line character after ten columns.
In this tutorial we have used FileStream
to read and write files.
Read C# tutorial or list all C# tutorials.