Ebooks

C# FileStream tutorial

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.

Program.cs
using System;
using System.IO;
using System.Text;

namespace WriteText
{
    class Program
    {
        static void Main(string[] args)
        {
            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.

Program.cs
using System;
using System.IO;

namespace WriteText2
{
    class Program
    {
        static void Main(string[] args)
        {
            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.

Program.cs
using System;
using System.IO;
using System.Text;

namespace ReadText
{
    class Program
    {
        static void Main(string[] args)
        {
            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.

Program.cs
using System;
using System.IO;

namespace ReadText2
{
    class Program
    {
        static void Main(string[] args)
        {
            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.

Program.cs
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

namespace DownloadImage
{
    class Program
    {
        static async Task Main(string[] args)
        {
            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.

Program.cs
using System;
using System.IO;

namespace ReadImage
{
    class Program
    {
        static void Main(string[] args)
        {
            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.