在本地文件夹中读取/写入内存流

Tos*_*Net 0 c# storagefile windows-phone-8.1

我需要读取和写入我对此方法进行编码的 MemoryStream 但我在加载方法上有一个错误:

    public async void SaveToStorage(MemoryStream stream, String filename)
    {
        var localFolder = ApplicationData.Current.LocalFolder;
        var storageFile = await localFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists);

        using (Stream x = await storageFile.OpenStreamForWriteAsync())
        {
            x.Seek(0, SeekOrigin.Begin);
            stream.WriteTo(x);
        }
    }
Run Code Online (Sandbox Code Playgroud)

以及出现问题的方法(我认为):

public async Task<MemoryStream> LoadToStorage(string filename)
{
    var localFolder = ApplicationData.Current.LocalFolder;
    var storageFile = await localFolder.GetFileAsync(filename);

    using (var fileStream = await storageFile.OpenStreamForReadAsync())
    {
        using (var memoryStream = new MemoryStream())
        {
            await fileStream.CopyToAsync(memoryStream);

            memoryStream.Seek(0, SeekOrigin.Begin);
            return memoryStream;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

Dam*_*ver 5

您不希望在语句MemoryStream中的LoadToStorage方法中创建您using,因为大概,调用者不希望您交回已被Disposed的对象:

public async Task<MemoryStream> LoadToStorage(string filename)
{
    var localFolder = ApplicationData.Current.LocalFolder;
    var storageFile = await localFolder.GetFileAsync(filename);

    using (var fileStream = await storageFile.OpenStreamForReadAsync())
    {
        var memoryStream = new MemoryStream();
        await fileStream.CopyToAsync(memoryStream);

        memoryStream.Seek(0, SeekOrigin.Begin);
        return memoryStream;
    }
}
Run Code Online (Sandbox Code Playgroud)