Чтение файла, открытого из «сканеров и камер», бросает несавторизованнуюaccessException
Вопрос
Наше приложение требует, чтобы пользователь выбрал фотографию с их камеры. Камеры, с которыми я тестировал при добавлении этой функции, все будет отображаться в качестве буквы диска в «Мой компьютер», поэтому загрузка и работа с изображением было немаловым. У коллектора дал мне свою камеру, а не крепление в качестве диска, она вызывает ужасный «мастер сканера и камеры». Мне поощрялось увидеть, что в «Мой компьютер» была запись для камеры, и действительно, я смог просмотреть и выбрать файлы из стандартного OpenFileDialog. - ЗДОРОВО!
За исключением того, что когда я пытаюсь получить доступ к файлу, я получаю «несавторизованныйaccessException». При расследовании я вижу, что он на самом деле загружает файлы из этого местоположения: C: Документы и настройки SK Локальные настройки Временные Интернет-файлы content.ie5 axy0dne3
Что в мире?! IE5.5 ??
Отсюда вещей продолжают идти вниз. Это местоположение, по-видимому, очень хорошо скрытое местоположение, которое я могу перейти только к непосредственному вводу пути в баре Explorer. Затем я подумал, что могу просто скопировать файл в удобное местоположение и работать с ним оттуда. Поэтому я сделал это, но я до сих пор не могу работать с файлом, бросать то же самое исключение: доступ к пути к пути «C: Documents и Settings SK локальные настройки Temp Img_0005 [1] .jpg 'запрещен.
Похоже, что настройки разрешений были скопированы вместе с файлом (имеет смысл).
Как обходной путь, я поручил своим пользователям использовать ужасный маленький волшебник, скопируйте файлы на временное место, а затем выберите их там. Мне это не нравится, но мне нужно было использовать эту функцию сегодня. С обломком на месте я бы сейчас хотел бы попытаться выполнить эту работу, если это возможно. В идеале я мог бы просто работать с файлом, не копируя его в другие места и т. Д. То, что я не понимаю, поскольку неавторизованныйAccessexception бросает.
Я надеюсь, что кто-то там столкнулся с аналогичным вызовом и может поделиться некоторыми советами о том, как работать с этими файлами. Я предпочел бы не пойти в целую маршрут WIA и работать с файлами через интерфейс камеры.
Решение
Файл только для чтения. Я должен был проверить это!
Конечно, есть много способов справиться с этим. Сначала я подумал: «Я просто заставлю читать только атрибут», но потом подумал «ждать, мне не нужно делать это, я ведь только читаю только файл» Моя библиотека IO и обнаружить, что я не явно не установил Fileabess, чтобы прочитать так, как я должен:
public static byte[] ReadWholeFileBytes(string filename)
{
Guard.ArgumentNotNullOrEmptyString(filename, "filename");
if(!File.Exists(filename))
{
throw new FileNotFoundException("Failed finding file " + filename);
}
using (Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
return ReadWholeStream(stream);
}
}
Однако ради этого ответа завершено для других, вы можете бросить читать только с этим небольшим количеством кода:
File.SetAttributes(openFile.FileName, FileAttributes.Normal);