【问题标题】:C# Downloading And Using File Causes System.UnauthorizedAccessExceptionC# 下载和使用文件导致 System.UnauthorizedAccessException
【发布时间】:2015-03-02 23:48:44
【问题描述】:

我正在尝试创建一个下载文件然后编辑该文件的应用程序。

我遇到的问题是,一旦下载了文件,它似乎并没有放开该文件,我可以将文件下载到其本地存储,我已经从 Iso 手动获取了文件,并且很好。如果我在下载文件后使用该应用程序继续,我会收到 System.UnauthorizedAccessException 错误,但如果我关闭并打开应用程序,然后只编辑保存在 iso 中的文件,它就可以工作,就像我说的那样,它仍在使用下载的东西文件。

 public async void DownloadTrack(Uri SongUri)
    {      
        var httpClient = new HttpClient();
        var data = await httpClient.GetByteArrayAsync(SongUri);
        var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Test.mp3", CreationCollisionOption.ReplaceExisting);
        var targetStream = await file.OpenAsync(FileAccessMode.ReadWrite);
        await targetStream.AsStreamForWrite().WriteAsync(data, 0, data.Length);              
        await targetStream.FlushAsync();      

    }

此代码可以很好地下载 mp3,因为我测试了下载文件。我已经看到代码以

结尾的示例
targetStream.Close();

但它没有给我,有没有另一种方法来关闭下载 谢谢。

【问题讨论】:

  • 如果你在连续的步骤中下载和处理文件,你为什么要这么异步呢?
  • 我只是在使用我遇到的示例,因为我对 C# 还很陌生
  • TargetStream.Dispose();似乎在做这项工作。
  • 方法Close()(如果可用)通常是Dispose() 的同义词。

标签: c# windows-phone-8.1 windows-8.1


【解决方案1】:

我真的很喜欢使用using,而不是调用Close()Dispose(),它会自动完成这项工作。所以你的方法可能是这样的:

public async void DownloadTrack(Uri SongUri)
{
    using (HttpClient httpClient = new HttpClient())
    {
        var data = await httpClient.GetByteArrayAsync(SongUri);
        var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Test.mp3", CreationCollisionOption.ReplaceExisting);

        using (var targetStream = await file.OpenAsync(FileAccessMode.ReadWrite))
        {
            await targetStream.AsStreamForWrite().WriteAsync(data, 0, data.Length);
            await targetStream.FlushAsync();
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 2020-06-26
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多