System.UnauthorizedAccessException: доступ к пути запрещен (UWP C#)
Я разрабатываю платформу uwp, которая позволяет загружать изображения в imgur с помощью imgur api. Я делаю это:
var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
picker.SuggestedStartLocation =
Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".jpeg");
picker.FileTypeFilter.Add(".png");
String path;
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
path = file.Path;
}
else
{
path = "Operation cancelled.";
}
try
{
var client = new ImgurClient("id", "secret");
var endpoint = new ImageEndpoint(client);
IImage img;
await Task.Run(async () =>
{
await Task.Yield();
Debug.Write("crash at FileStream\n");
using (var fs = new FileStream(@path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
Debug.Write("crash at Upload\n");
img = await endpoint.UploadImageStreamAsync(fs);
Debug.Write("Image uploaded. Image Url: " + img.Link);
Windows.UI.Xaml.Controls.Image image = new Windows.UI.Xaml.Controls.Image();
image.Source = new BitmapImage(new Uri(img.Link));
image.Width = img.Width;
image.Height = img.Height;
imgList.Clear();
imgList.Add(image);
await LoadGalery();
index = 0;
}
});
}
catch (ImgurException imgurEx)
{
Debug.Write("An error occurred uploading an image to Imgur.");
Debug.Write(imgurEx.Message);
}
У меня есть эта ошибка:
- $ исключение {System.UnauthorizedAccessException: доступ к пути 'C:\Nouveau dossier\mmmh.PNG' запрещен. в System.IO.WinRTIOExtensions.d__2`1.MoveNext() --- Конец трассировки стека из предыдущего местоположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Задача) в System.IO.WinRTFileSystem.d__41.MoveNext() --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaonSurow задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в System.IO.WinRTFileSystem.Open(String fullPath, режим FileMode, доступ к FileAccess, общий доступ к FileShare, размер файла3232 parentSize, опции FileOptions, FileOptions, FileOptions).MultiplexingWin32WinRTFileSystem.Open(String fullPath, режим FileMode, доступ к FileAccess, общий доступ к FileShare, параметры типа3232 bufferSize, параметры FileOptions, родительский файл FileStream) в System.IO.FileStream.Init(путь строки, режим FileMode, FileAcc Доступ ess, общий доступ к FileShare, размер буфера Int32, параметры FileOptions) в System.IO.FileStream..ctor(путь строки, режим FileMode, доступ к FileAccess, общий ресурс FileShare) в App1.MainPage.<> c__DisplayClass7_1.
d.MoveNext () --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.GetResult()
в App1.MainPage.d__7.MoveNext() --- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) в System.Runtime.CompilerServices.TaskAwaiter. HandleNonSuccessAndDebuggerNotification (Задача) в System.Runtime.CompilerServices.TaskAwaiter.GetResult()
в App1.MainPage.d__9.MoveNext()} System.UnauthorizedAccessException
Я попытался создать новый каталог в папке C:/ с моей картинкой, изменить права безопасности, запустить Visual Studio от имени администратора, но ничего не изменилось...
Ошибка происходит в var fs = new FileStream(@path, FileMode.Open, FileAccess.Read, FileShare.Read
Я видел много тем об этом весь день, я перепробовал все, но ничего не изменилось, если у кого-то есть идея!
3 ответа
Когда пользователь выбирает произвольный файл, используя FileOpenPicker
, вы получите StorageFile
пример. Это единственный способ получить доступ к файлу, вы не можете использовать Path
напрямую, поскольку этот API не находится в изолированной программной среде WinRT. Вы можете получить доступ только к файлам в вашем приложении AppData
каталог непосредственно с Path
,
Однако вы можете получить поток из полученных StorageFile
Бу вызывает соответствующий метод расширения:
var stream = await file.OpenStreamForReadAsync();
Обновить
Информация в этом посте сейчас устарела. После обновления Windows 10 от апреля 2018 года вы можете объявить о возможности доступа к широкой файловой системе, которая позволит вашему приложению получить доступ к любому пути в файловой системе, даже если System.IO
API-интерфейсы. Эта возможность, однако, проверяется во время сертификации, поэтому вы должны убедиться, что у приложения есть веская причина иметь доступ ко всей файловой системе пользователя, поскольку в противном случае ваше приложение будет отклонено, чтобы предотвратить злонамеренное использование.
После обновления Windows 10 от апреля 2018 года вы можете объявить> возможность доступа к широкой файловой системе, которая позволит вашему приложению> получать доступ к любому пути в файловой системе, даже с помощью> API-интерфейсов System.IO.
Нет
StorageFile file = await
StorageFile.GetFileFromPathAsync("c:\\1\\1.txt");
//string s = File.ReadAllText("C:\\1\\1.txt");
//string s = await
File.ReadAllTextAsync("C:\\1\\1.txt");
string text = await
Windows.Storage.FileIO.ReadTextAsync(file);
var dialog = new MessageDialog("done");
await dialog.ShowAsync();
StorageFile работает нормально, но System.IO имеет исключение System.UnauthorizedAccessException: "Доступ к пути" C:\1\1.txt "запрещен".
Согласно документам Microsoft, приложения UWP изолированы, то есть (в отличие от консольного приложения) они имеют ограниченный доступ к ресурсам компьютера. Можно предоставить дополнительные возможности приложению UWP, изменив
Package.appxmanifest
.
Эти ссылки содержат полную историю:
https://docs.microsoft.com/en-us/windows/uwp/packaging/app-capability-declarations#custom-capabilities https://docs.microsoft.com/en-us/windows/uwp/files/file -доступ-разрешения