Невозможно прочитать файл в FutureAccessList - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь прочитать файл CSV, выбранный с помощью OpenFilePicker и положить в FutureAccessList. Но всякий раз, когда я пытаюсь прочитать это, я получаю DeniedAccessException.

Эта функция является тестом:

private async Task readCSVCustomAsync()
{
    ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
    StorageFile file;
    FileOpenPicker openPicker = new FileOpenPicker();
    openPicker.SuggestedStartLocation = PickerLocationId.Desktop;
    openPicker.FileTypeFilter.Add("*");
    //picking a file with FilePicker
    file = await openPicker.PickSingleFileAsync();
    //Storing file in futureaccesslist
    string faToken = StorageApplicationPermissions.FutureAccessList.Add(file);

    //getting the file from FA list
    var fileOpenTest = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(faToken);

    //trying to read it
    using (var reader = new StreamReader(fileOpenTest.Path)) //Exception here
    using (var csv = new CsvReader(reader))
    {
        //elimination des premieres lignes avant le header
        bool headerOK = false;
        while (csv.Read() && !headerOK)
        {
            string rec = csv.GetField(0) + csv.GetField(1);
            if (!rec.Equals(""))
            {
                csv.ReadHeader();
                headerOK = true;
            }
        }
    }
}

Итак, я пытаюсь поместить файл в список FA и получить его позже, чтобы прочитать содержимое (это выбранный мной файл csv).

Но даже если я вставлю его в FutureAccessList, я получаю AccessDeniedException, когда пытаюсь его прочитать, почему я получаю это исключение?

1 Ответ

1 голос
/ 03 мая 2019

Невозможно прочитать файл в FutureAccessList

Проблема в том, что вы не можете использовать System.IO.StreamReader для доступа к файлу, где в FutureAccessList указан путь, а свойство пути доступно только в Windows Storage API. Поэтому вам нужно открыть файл как steam, а затем вызвать этот var reader = new StreamReader(stream).

private async Task readCSVCustomAsync()
{
    ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
    StorageFile file;
    FileOpenPicker openPicker = new FileOpenPicker();
    openPicker.SuggestedStartLocation = PickerLocationId.Desktop;
    openPicker.FileTypeFilter.Add("*");
    //picking a file with FilePicker
    file = await openPicker.PickSingleFileAsync();
    //Storing file in futureaccesslist
    string faToken = StorageApplicationPermissions.FutureAccessList.Add(file);

    //getting the file from FA list
    var fileOpenTest = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(faToken);
     // open file as stream, to avoid using path property
    var stream = await fileOpenTest.OpenStreamForReadAsync();
    //trying to read it
    using (var reader = new StreamReader(stream)) 
    using (var csv = new CsvReader(reader))
    {
        //elimination des premieres lignes avant le header
        bool headerOK = false;
        while (csv.Read() && !headerOK)
        {
            string rec = csv.GetField(0) + csv.GetField(1);
            if (!rec.Equals(""))
            {
                csv.ReadHeader();
                headerOK = true;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...