using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace FileRange
{
public class ArrayFile<T>
{
private BinaryReader binaryReader;
private BinaryWriter binaryWriter;
private FileStream fs;
private string fileTempName;
private int Objectsize;
public ArrayFile()
{
fileTempName = Guid.NewGuid().ToString() + DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".temp";
if (File.Exists(fileTempName))
{
;
}
fs = new FileStream(fileTempName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
binaryReader = new BinaryReader(fs);
binaryWriter = new BinaryWriter(fs);
this.Objectsize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(T));
}
public T this[long i]
{
get
{
try
{
binaryReader.BaseStream.Seek(i * Objectsize, SeekOrigin.Begin);
if (Objectsize == sizeof(double))
{
return (T)Convert.ChangeType(binaryReader.ReadDouble(), typeof(T));
}
else
{
return (T)Convert.ChangeType(binaryReader.ReadInt16(), typeof(T));
}
}
catch (Exception)
{
throw;
}
}
set
{
binaryWriter.BaseStream.Seek(i * Objectsize, SeekOrigin.Begin);
if (Objectsize == sizeof(double))
{
binaryWriter.Write((double)Convert.ChangeType(value, typeof(double)));
}
else
{
binaryWriter.Write((short)Convert.ChangeType(value, typeof(short)));
}
}
}
public void Closs()
{
fs.Close();
File.Delete(fileTempName);
}
}
}