2016-09-19 2 views
0

Я пытаюсь загрузить файл на amazon s3 после его удаления.UWP C# - Невозможно использовать файл после файла.

Для начала, я делаю это:

 var picker = new Windows.Storage.Pickers.FileOpenPicker(); 
     picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail; 
     picker.SuggestedStartLocation = 
      Windows.Storage.Pickers.PickerLocationId.PicturesLibrary; 
     picker.FileTypeFilter.Add("*"); 

     Windows.Storage.StorageFile file = await picker.PickSingleFileAsync(); 

так вот, file определена и готова к эксплуатации.

После этого, я стараюсь, чтобы загрузить его, как это:

 if (file != null) 
     { 
      upload(file.Path); 
     } 
     ... 

     public async Task<string> upload(string path) 
     { 
      TransferUtility utility = new TransferUtility(...); 
      await utility.UploadAsync(path,key, bucket); // HERE IS THE PROBLEM 

     } 

и так, что это ошибка, я поймала:

Исключение брошено: 'System.AggregateException' в mscorlib. ni.dll System.AggregateException: Произошла одна или несколько ошибок. ---> System.UnauthorizedAccessException: Acces denied.

на System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task задач) при System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задач) при PCLStorage.WinRTFileSystem.d__0.MoveNext()
- - Конец внутренней трассировки стека исключений --- у System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task 1.get_Result() в Amazon.S3.Transfer.TransferUtility.validate (TransferUtilityUploadRequest запроса) в Amazon.S3.Transfer.TransferUtility .GetUploadCommand (TransferUtilityUploadRequest запрос, SemaphoreSli м asyncThrottler) на Amazon.S3.Transfer.TransferUtility.UploadAsync (String Filepath, String bucketName, ключ String, CancellationToken CancellationToken) на Tilkee.Upload.d__0.MoveNext() ---> (Inner Exception # 0) System.UnauthorizedAccessException: Acces denied.

Я попытался поместить его в другую задачу async, но тот же результат.

Любые идеи?

+0

Файлпикер должен просто получить имя файла и не открывать файл. Существуют разные версии файлового сборщика, и вы должны использовать тот, который не открывает файл, просто получите имя файла. – jdweng

+0

Как я могу просто получить путь к файлу, а не открывать его? – F4Ke

+0

В приложении формы это: OpenFileDialog (не FileOpen). – jdweng

ответ

2

Мы не можем получить доступ к файлам, используя его путь, если файл не находится в доступном месте, таком как папка установки приложения, известные папки, такие как музыкальная библиотека, поскольку приложения UWP изолированы и работают в изолированной программной среде. FileOpenPicker помогает в приложении, чтобы пользователь мог нарушить контейнер приложения и получить доступ к файлам, да, мы можем затем получить доступ к этому файлу, например, используя поток, мы также можем получить путь к этому файлу, но путь здесь не может быть использован чтобы снова получить доступ к этому файлу, когда вы хотите загрузить этот файл. Для получения дополнительной информации вы можете обратиться к Skip the path: stick to the StorageFile.

Мое предложение состоит в том, что после того, как файл будет выбран, перейдите в поток файлов и попробуйте загрузить этот поток файлов.

Смежные вопросы