我需要一种异步读取文件到字节数组的方法,但是我不知道文件的大小(可以是几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);
    }

10-05 18:26