我需要一种异步读取文件到字节数组的方法,但是我不知道文件的大小(可以是几Kb或几Mb)。
我试过FileStream来获取长度并使用BeginRead,但问题是长度很长,BeginRead仅接受int,如果文件很大,则可能会溢出。
我想的另一种方式是用较小的块读取它,但是每次我必须读取新的字节块时,都必须创建一个新的数组(只是想避免必须初始化新的更大的数组)。
如果有人知道更好或更简单的方法,我会很高兴和感激:P其他方面,我将以较小的块数来完成。
请寻求帮助。
最佳答案
另一种方法是旋转线程并调用System.IO.File.ReadAllBytes(string)。听起来分块没有任何优势(因为您要将整个事情都带入内存中),所以这非常简单。
在此sample的帮助下:
private void GetTheFile()
{
FileFetcher fileFetcher = new FileFetcher(Fetch);
fileFetcher.BeginInvoke(@"c:\test.yap", new AsyncCallback(AfterFetch), null);
}
private void AfterFetch(IAsyncResult result)
{
AsyncResult async = (AsyncResult) result;
FileFetcher fetcher = (FileFetcher)async.AsyncDelegate;
byte[] file = fetcher.EndInvoke(result);
//Do whatever you want with the file
MessageBox.Show(file.Length.ToString());
}
public byte[] Fetch(string filename)
{
return File.ReadAllBytes(filename);
}