FileStream的随机存取,其实就是利用FileStream流的CanSeek属性和Seek函数和SeekOrigin枚举的Origin、Current、End的值来存取。
源代码如下:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace RandomTakeConsole
{
class Program
{
static void Main(string[] args){
CreateFile();
FormBegin();
FormEnd();
FormCurrent();
Console.ReadLine();
}
private static void FormCurrent(){
FileStream fs = null;
try{
fs = new FileStream("test.txt", FileMode.Open, FileAccess.ReadWrite);
if (fs.CanSeek){
fs.Seek(2, SeekOrigin.Begin);
fs.WriteByte(36);
fs.Seek(-1, SeekOrigin.Current);
int i = fs.ReadByte();
Console.WriteLine("-1 byte form current is :{0}", (char)i);
}
}
catch (Exception ){}
finally{fs.Close();}
}
private static void FormEnd(){
FileStream fs = null;
try{
fs = new FileStream("test.txt", FileMode.Open);
if (fs.CanSeek){
//最后一位从-3开始
fs.Seek(-6, SeekOrigin.End);
int i = fs.ReadByte();
Console.WriteLine("4 bytes from end is:{0}", (char)i);
}
}
catch (Exception){}
finally{fs.Close();}
}
private static void FormBegin()
{
FileStream fs = null;
try
{
fs = new FileStream("test.txt", FileMode.Open);
if (fs.CanSeek){
//开始处以0开始
fs.Seek(3, SeekOrigin.Begin);
int i = fs.ReadByte();
Console.WriteLine("4 bytes form Begin is:{0}", (char)i);
}
}
catch (Exception) { }
finally { fs.Close(); }
}
private static void CreateFile()
{
FileStream fs = new FileStream("test.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("12345879986756454321");
sw.Close();
}
}
}