UWP:异步读取文件到byte []

tes*_*ing 7 c# windows-phone win-universal-app windows-10-mobile

我想将本地存储的文件读入字节数组.我怎么做?这是我的尝试:

StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(filePath);
var file = await folder.GetFileAsync(filePath);
var buffer = await FileIO.ReadBufferAsync(file);
DataReader dataReader = Windows.Storage.Streams.DataReader.FromBuffer(buffer);
// doesn't work because ReadBytes wants a byte[] as parameter and also isn't asynchronous
byte[] result = dataReader.ReadBytes(buffer.Length);
Run Code Online (Sandbox Code Playgroud)

Dan*_*erg 10

我认为其他答案会使事情变得不必要地复杂化.IBuffer.ToArray()为此目的有一种方便的扩展方法.

只需这样做:

using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Storage;
...
IStorageFile file;
IBuffer buffer = await FileIO.ReadBufferAsync(file);
byte[] bytes = buffer.ToArray();
Run Code Online (Sandbox Code Playgroud)

  • 你是对的 - 我已经添加了等待。关于 ToArray(),它是 System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions 中定义的扩展方法,这就是我在示例中导入该命名空间的原因。 (2认同)

小智 8

        StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
        StorageFile sampleFile = await storageFolder.GetFileAsync(FILE_NAME);

        byte[] result;
        using (Stream stream = await sampleFile.OpenStreamForReadAsync())
        {
            using (var memoryStream = new MemoryStream())
            {

                stream.CopyTo(memoryStream);
                result = memoryStream.ToArray();
            }
        }
Run Code Online (Sandbox Code Playgroud)