Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将IO.Stream写入(读取)ApplicationData.Current.LocalFolder_C#_Windows 8_Microsoft Metro - Fatal编程技术网

C# 将IO.Stream写入(读取)ApplicationData.Current.LocalFolder

C# 将IO.Stream写入(读取)ApplicationData.Current.LocalFolder,c#,windows-8,microsoft-metro,C#,Windows 8,Microsoft Metro,将amnd write和IO.Stream(我的例子中是从internet下载的Zip文件)读取到ApplicationData.Current.LocalFolder的最佳方式是什么 我试过了 public static async Task WriteToFile( this System.IO.Stream input, string fileName, StorageFolder folder = null) { fold

将amnd write和IO.Stream(我的例子中是从internet下载的Zip文件)读取到ApplicationData.Current.LocalFolder的最佳方式是什么

我试过了

public static async Task WriteToFile(
       this System.IO.Stream input,
       string fileName,
       StorageFolder folder = null)
    {
        folder = folder ?? ApplicationData.Current.LocalFolder;
        var file = await folder.CreateFileAsync(
            fileName,
            CreationCollisionOption.ReplaceExisting);
        using (var fs = await file.OpenAsync(FileAccessMode.ReadWrite))
        {
            using (var outStream = fs.GetOutputStreamAt(0))
            {
                using (var dataWriter = new DataWriter(outStream))
                {
                    byte[] buffer = new byte[8 * 1024];
                    int len;
                    while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        dataWriter.WriteBytes(buffer);
                    }

                    await dataWriter.StoreAsync();
                    dataWriter.DetachStream();
                }

                await outStream.FlushAsync();
            }
        }
    }
写作及

StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(filename);
var fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
var stream = fileStream.AsStreamForRead();
但是文件在某个地方被破坏了,我不认为在读的时候有问题,所以应该在写文件的时候。是否有更好的方法将IO.Stream写入到ApplicationData.Current.LocalFolder中,这样做更有效?

尝试以下方法:

static async void DownloadFileAsync(
    this HttpClient httpClient,
    string requestUri,
    string fileName,
    StorageFolder folder = null)
{
    folder = folder ?? ApplicationData.Current.LocalFolder;

    var file = await folder.CreateFileAsync(
        fileName, CreationCollisionOption.ReplaceExisting);

    using (var httpStream = await httpClient.GetStreamAsync(uri))
    using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite))
    {
        await httpStream.CopyToAsync(fileStream.AsStreamForWrite());
    }
}

MSDN:,。

为什么这里有这么多异步?@AndrewBarber因为这是WinRT中的新方法?@AndrewBarber可能需要50毫秒以上的每个操作都必须异步完成