您的位置:首页 > 其它

简单的文件读写操作

2008-07-04 16:06 309 查看
终于有空下来了,几乎是把前段时间看得异步回调又给忘了,但还好,想得开,嘿嘿

学习本来就是一个离散再结合的过程

回忆一下,不怎么花功失就复习了一遍,贴个异步读取文件的DEMO

class Program

{

class FileStatus

{

public byte[] Buffer;

public FileStream Fs;

public int ID;

}

private static readonly int NBytesPerFile = 10000000;

private static readonly int NRead = 5;

private static string FileName = "blob.bin";

static void CreateBlobFile()

{

byte[] blob = new byte[NBytesPerFile];

FileStream fs =

new FileStream(FileName, FileMode.Create, FileAccess.Write, FileShare.None, 4096, false);

fs.Flush();

fs.Close();

}

static void Main(string[] args)

{

CreateBlobFile();

//创建好文件,开始复制

for(int i=0;i<NRead;i++)

{

FileStream fs = new FileStream(FileName,

FileMode.Open, FileAccess.Read,FileShare .Read, 4096, true);

FileStatus status = new FileStatus();

status.ID = i;

status.Fs = fs;

status.Buffer = new byte[NBytesPerFile];

Console.WriteLine("Thread #{0}:Trigger asynchronous read #{1}",

System.Threading.Thread.CurrentThread.ManagedThreadId, i);

//开始异步读取

fs.BeginRead(status.Buffer,

0, NBytesPerFile, new AsyncCallback(callback), status);

}

Console.ReadLine();

}

//该方法会在读取完毕时调用,而其线程是与发出回调的线程是同一个的

static void callback(IAsyncResult asyncResult)

{

FileStatus status = asyncResult.AsyncState as FileStatus;

if(status!=null)

{

byte[] data = status.Buffer;

FileStream fs = status.Fs;

Console.WriteLine("Thread #{0}:Begin work on data #{1}"

, System.Threading.Thread.CurrentThread.ManagedThreadId

, status.ID);

//在这里等待,读取完 即等待挂起的异步读取完成

int nbytesRead = fs.EndRead(asyncResult);

//在close这个地方把缓冲的读进来才关闭

fs.Close();

System.Threading.Thread.Sleep(1000);

Console.WriteLine("Thread #{0}:End work on data #{1}",

System.Threading.Thread.CurrentThread.ManagedThreadId,

status.ID);

}

}

}

运行的结果图



说到文件操作,无非就是读写,昨晚看一篇讲病毒史的文章,提到一种自复制自运行的

自已也就写写,运行就算了,呆会不知会咋样,自复制总行吧,

说白了也就是复制二进制的EXE文件喽

string sExe = System.AppDomain.CurrentDomain.FriendlyName;

string s = Application.ExecutablePath;

FileStream inStream = File.OpenRead(s);

Random ra = new Random();

FileStream OutStream = File.OpenWrite(ra.Next().ToString()+ "copy.exe");

byte[] buffer = new System.Byte[bufferSize];

int nBytesRead = 0;

while ((nBytesRead = inStream.Read(buffer, 0, bufferSize)) > 0)

{

OutStream.Write(buffer, 0, nBytesRead);

}

//记得随手关门

inStream.Close();

OutStream.Close();

其实有时觉得挺无聊的!感觉那些设计模式好吸引人呀!

可由于我的工作是WINFORM,更多是跟WINDOWS打交道,我需要知道WIN32 API等等WINDOWS,C++类的编程

有时感到迷茫,不知是否该再坚持下去,看到那些什么ASP.NET,CSS JS就一头雾水

但看到一个新来的一个同事用Hibernate很好,也认识好几个模式,说得很清楚,连一个C++函数,一个结构体概念都很模糊时,

我就更加不知道,C#在做应用软件的路到底有多长!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: