C# tutorial-C# File Stream: Random-Access File

File Stream in C#

Random-Access File

The records in random-access file can be accessed directly and quickly without searching through a large number of records as in the case of sequential-access file. Random-access file is used in instant access systems such as banking system, sale system, air-line reservation system, etc.

Writing to and reading from a random-access file

In the example below, we write information of students to a file and read from it. Each information of a student are stored in a Student object generated from a Student class. The information of every student contains student number and student name. To write to and read from an random-access file, you can use BinaryWriter class and BinaryReader class. In the random-access file, you can specify the location to write data in or read data from using the position property of the FileStream class.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
class Program
public static int pos=0;
static void Main(string[] args)


class Student

private string stnumber;
private string stname;
private int recordsize;

public string stunumber
{ //stunumber property

set { stnumber = value; }
get { return stnumber; }

public string stuname
{ //stuname property

set { stname = value; }
get { return stname; }


public int size

get { return calsize(); }
private int calsize()
recordsize = 2 * 15 + 2 * 20;// max record size
return recordsize;

static void addrecord(){

Student stu=new Student();
String con = "y";
while (con != "n")

Console.Write("Enter student number:");

stu.stunumber = Console.ReadLine();

Console.Write("Enter student name:");

stu.stuname = Console.ReadLine();
pos+= 1; //update position
writeToFile("D:\\Student.txt", stu, pos, stu.size);


static void writeToFile(string filename, Student obj, int pos, int size){

FileStream fout;

BinaryWriter bw;

//create a file stream object

fout = new FileStream(filename, FileMode.Append , FileAccess.Write);

//create a binary writer object
bw = new BinaryWriter(fout);

//set file position where to write data
fout.Position = pos * size;
//write data
bw.Write(obj.stunumber );
bw.Write(obj.stuname );
//close objects


static void readFromFile(string filename){

FileStream fn;
BinaryReader br;

Student stu=new Student();

int currentrecord=0;

//open file to read data

fn = new FileStream(filename, FileMode.Open , FileAccess.Read);

br = new BinaryReader(fn);

//read next record
int i;
for(i=1; i<=(int)(fn.Length)/stu.size;i++){

currentrecord += 1; //update currentrecord position

fn.Seek(currentrecord * stu.size, 0);

stu.stunumber = br.ReadString().ToString() ;
stu.stuname = br.ReadString().ToString() ;

Console.WriteLine(stu.stunumber +"\t"+stu.stuname );


//update pos to the current position

pos = currentrecord;

//close objects





sneha comment


Why the recordsize = 2 * 15 + 2 * 20; is used?


This website intents to provide free and high quality tutorials, examples, exercises and solutions, questions and answers of programming and scripting languages:
C, C++, C#, Java, VB.NET, Python, VBA,PHP & Mysql, SQL, JSP, ASP.NET,HTML, CSS, JQuery, JavaScript and other applications such as MS Excel, MS Access, and MS Word. However, we don't guarantee all things of the web are accurate. If you find any error, please report it then we will take actions to correct it as soon as possible.