Web サービスに対するサービス参照を含む C# プロジェクトがあります。
次のコードがあります。最初に、サービス リクエストでメソッドをトリガーします。
private void Button_Click(object sender, RoutedEventArgs e)
{
App.service.getFileCompleted += service_getFileCompleted;
App.service.getFileAsync(App.user, App.document);
}
そしてservice_getFileCompleted
は を取得しbyte[]
、それをファイルに入れ、デフォルトのアプリケーションでそのファイルを開くことになっています:
async void service_getFileCompleted(object sender, BackendReference.getFileCompletedEventArgs e)
{
string tmp = "temp." + e.Result.type;
StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile localFile = await local.CreateFileAsync(tmp, CreationCollisionOption.ReplaceExisting);
using (Stream writeStream = await localFile.OpenStreamForWriteAsync())
{
writeStream.Seek(0, SeekOrigin.End);
await writeStream.WriteAsync(e.Result.fileData, 0, e.Result.fileData.Length);
}
await Windows.System.Launcher.LaunchFileAsync(localFile);
}
}
アプリが初めて起動し、ボタンがトリガーされたとき、それは魅力のように機能します。ただし、ボタンを 2 回目に押すと、行
Stream writeStream = await localFile.OpenStreamForWriteAsync()
をキャストしSystem.UnauthorizedAccessException
ます。
より正確には:
System.UnauthorizedAccessException: アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (タスク タスク)
で System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (タスク タスク)
で System.IO.WindowsRuntimeStorageExtensions.d__5.MoveNext()--- 例外がスローされた前の場所からのスタック トレースの終わり ---
System.IO.WindowsRuntimeStorageExtensions.d__5.MoveNext() で
--- 例外がスローされた前の場所からのスタック トレースの終わり ---
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (タスク タスク)
で System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (タスク タスク)
で System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
で archive.DocumentDetail.d__0.MoveNext ()} System.Exception {System.UnauthorizedAccessException}
これはなぜですか?
ありがとう