xamarin 形成 UWP 应用程序 - 在本地保存文件后,有时它会锁定

xamarin forms UWP app - after saving a file locally, sometimes it locks

背景信息

我有一个 c# xamarin 表单应用程序,我允许用户从 Sharepoint 下载文件。我正在将流保存到 windows 桌面上的本地文件夹。下载完成后,我希望用户能够单击文件并将其打开。目前,当我尝试打开该文件时,出现错误提示该文件正在被另一个应用程序或用户使用。

下载本身似乎运行良好。

代码如下:

 try
 {
      using (var stream = await App.GraphClient.Sites[TestSiteId].Drive.Items[listItemAsDriveItem.DriveItem.Id].Content.Request().GetAsync())
      {
         var driveItemPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), listItemAsDriveItem.DriveItem.Name);
         var driveItemFile = System.IO.File.Create(driveItemPath);
         stream.Seek(0, SeekOrigin.Begin);
         stream.CopyTo(driveItemFile);
         stream.Dispose();
      }
      DisplayAlert("Download", listItemAsDriveItem.DriveItem.Name + " successfully downloaded", "OK");
 }
 catch (Exception ex)
 {
      Console.WriteLine("Download failed with: " + ex.Message);
      DisplayAlert("Error", listItemAsDriveItem.DriveItem.Name + " failed with: " + ex.Message, "OK");
 }

我试过的

如您所见,我将所有内容都包含在“using{}”语句中。 我还明确调用 stream.Dispose(); 我还尝试用 Close() 替换对 .Dispose 的调用,但这也没有区别。

您尝试过使用 FileStream 吗?

try
{
    var driveItemPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), listItemAsDriveItem.DriveItem.Name);
    using (var stream = await App.GraphClient.Sites[TestSiteId].Drive.Items[listItemAsDriveItem.DriveItem.Id].Content.Request().GetAsync())
    using (var fs = new FileStream(driveItemPath, FileMode.Create, FileAccess.Open))
    {
        var driveItemFile = System.IO.File.Create(driveItemPath);
        stream.Seek(0, SeekOrigin.Begin);
        stream.CopyTo(fs);
    }
    DisplayAlert("Download",  listItemAsDriveItem.DriveItem.Name + " successfully downloaded", "OK");
}
catch (Exception ex)
{
    Console.WriteLine("Download failed with: " + ex.Message);
    DisplayAlert("Error", listItemAsDriveItem.DriveItem.Name + " failed with: " + ex.Message, "OK");
}

问题是 driveItemFile 也是一个流,但它不是 disposed/closed,它是创建和锁定文件的实际流