В настоящее время я разрабатываю пример приложения Windows 8, который загружает файл журнала и обрабатывает его для показа в DevExpress XtraGrid. Когда я добавить необходимые расширения для фильтра Тип файла, код бросает UnauthorizedAccessException, даже если я добавил расширений файлов в appxmanifest:FileOpenPicker throws UnauthorizedAccessException
private void OpenFile()
{
try
{
FileOpenPicker pickLog = new FileOpenPicker();
pickLog.CommitButtonText = "Logdatei öffnen";
pickLog.SuggestedStartLocation = PickerLocationId.ComputerFolder;
pickLog.ViewMode = PickerViewMode.List;
pickLog.FileTypeFilter.Add(".log"); //This is where the code jumps out
pickLog.FileTypeFilter.Add(".slg");
pickLog.PickSingleFileAsync().Completed += delegate
{
StorageFile logFile = pickLog.PickSingleFileAsync().GetResults();
Stream strLog = logFile.OpenStreamForReadAsync().Result;
vm.LoadCommand.Execute(strLog);
};
pickLog.PickSingleFileAsync();
}
catch (Exception ex) //Catches UnauthorizedAccessException
{
MessageDialog md = new MessageDialog(ex.Message, ex.GetType().ToString());
md.ShowAsync();
}
}
Хуже дело в том, что если я закомментировать FileTypeFilter линии, код выскакивает на анонимный метод я добавил туда:
private void OpenFile()
{
try
{
FileOpenPicker pickLog = new FileOpenPicker();
pickLog.CommitButtonText = "Logdatei öffnen";
pickLog.SuggestedStartLocation = PickerLocationId.ComputerFolder;
pickLog.ViewMode = PickerViewMode.List;
//pickLog.FileTypeFilter.Add(".log");
//pickLog.FileTypeFilter.Add(".slg");
pickLog.PickSingleFileAsync().Completed += delegate //This is where the code jumps out
{
StorageFile logFile = pickLog.PickSingleFileAsync().GetResults();
Stream strLog = logFile.OpenStreamForReadAsync().Result;
vm.LoadCommand.Execute(strLog);
};
pickLog.PickSingleFileAsync();
}
catch (Exception ex) //Catches COMException
{
MessageDialog md = new MessageDialog(ex.Message, ex.GetType().ToString());
md.ShowAsync();
}
}
Я сделал тщательные исследования в течение нескольких дней подряд без результатов работы (в том числе источники StackOverflow), который является, почему я задаю этот вопрос прямо здесь. Я признателен за любую помощь, оказанную здесь :)
UPDATE:
Когда COMException был брошен, то HRESULT всегда (0x80070005), но внутренняя HRESULT (отображаемая в окне Подробности HRESULT) была нормально -21474xxxx, но когда я отлаживаю свое приложение в VS с повышенным правом, внутренний HRESULT равен -2147024891.
Что вы подразумеваете под «кодом выпрыгивает»? –
Вы попробовали другой объект, предлагаемый для размещения, чем ComputerFolder? – Uwe
@BenRobinson By «Код выпрыгивает», я имел в виду, что код больше не запускается и идет непосредственно к блоку catch. – AlphaNERD