Проблема с разрешением при сохранении пользовательского класса путем сохранения в файл .txt - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь сохранить класс viewModel моего приложения в файл .txt, чтобы его можно было сохранять из одного сеанса в другой.

Я следую https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/walkthrough-persisting-an-object-in-visual-studio в качестве примера.

Однако я не могу получить правильные разрешения, позволяющие моему коду записывать в файл.

        private void Save()
        {
            BinaryFormatter bf = new BinaryFormatter();

            // Serialize the Binary Object and save to file
            using (Stream fsout = File.Create("C:\\temp\\viewModel.txt"))
            {
                bf.Serialize(fsout, dataContext);
            }
        }

Сообщение об ошибке:

System.UnauthorizedAccessException
  HResult=0x80070005
  Message=Access to the path 'C:\temp\viewModel.txt' is denied.

Выше вот как я пытаюсь создать и записать в файл. Я пробовал запустить Visual Studio 2019 от имени администратора, и это, похоже, не помогает. Я пробовал несколько других расположений файлов, но безрезультатно. Я проверил, что у меня есть права доступа к папке. Я не уверен, что делаю неправильно.

Ответы [ 3 ]

1 голос
/ 27 мая 2020

В UWP доступ к файлам по пути ограничен. Рекомендуется использовать FileOpenPicker для выбора файлов.

Но если вы просто сохраняете данные локально, вы можете использовать ApplicationData.Current.LocalFolder для доступа к локальной папке приложения.

вот так:

private async void Save()
{
    BinaryFormatter bf = new BinaryFormatter();

    var localFolder = ApplicationData.Current.LocalFolder;
    var file = await localFolder.CreateFileAsync("viewModel.txt", CreationCollisionOption.OpenIfExists);

    // Serialize the Binary Object and save to file
    using (Stream fsout = await file.OpenStreamForWriteAsync())
    {
        bf.Serialize(fsout, dataContext);
    }
}

Для получения подробной информации о сохранении данных в локальные файлы, вы можете обратиться к этому документу:

0 голосов
/ 26 мая 2020

Мне удалось заставить работать следующее:

    private void Save()
    {
        BinaryFormatter bf = new BinaryFormatter();

        // Serialize the Binary Object and save to file
        using (Stream fsout = new FileStream(System.IO.Path.GetTempPath() + "viewModel.txt", FileMode.Create, FileAccess.ReadWrite, FileShare.None))
        {
            bf.Serialize(fsout, dataContext);
        }
    }

Однако я не уверен, подходит ли это место для хранения данных для производственного приложения.

0 голосов
/ 26 мая 2020

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

using (Stream fsout = File.Open(@"c:\ab\testings.txt", FileMode.Create))
{
    bf.Serialize(fsout, dataContext);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...