Очистить содержимое текстового файла C # (WinRT)

1

В настоящее время я работаю над проектом с использованием Windows Runtime, и я столкнулся с препятствием, это было всегда очень легко сделать, и я очень расстроен тем, что не понял этого.

Я сижу часами, и я просто не могу понять. Я получаю сообщение "Доступ запрещен", также в некоторых вариантах моего кода, когда я нажимал на кнопку, ничего не произошло. Я чувствую, что ответ смотрит мне прямо в лицо. Вот код:

private async void btnDtlsSaveChanges(object sender, TappedRoutedEventArgs e)
{
    StorageFile del = await Package.Current.InstalledLocation
        .GetFileAsync("UserDetails.txt");
    await del.DeleteAsync();

    StorageFile file = await Package.Current.InstalledLocation.CreateFileAsync
        ("UserDetails.txt", CreationCollisionOption.OpenIfExists);

    using (StreamWriter writer = 
        new StreamWriter(await file.OpenStreamForWriteAsync()))
    { 
        await writer.WriteLineAsync("Hello World");               
    }
}

Я также попытался использовать ReplaceExisting вместо OpenIfExists:

StorageFile file = await Package.Current.InstalledLocation.CreateFileAsync
    ("UserDetails.txt", CreationCollisionOption.ReplaceExisting);

using (StreamWriter writer = new StreamWriter(await file.OpenStreamForWriteAsync()))
{ 
    await writer.WriteLineAsync("Hello World");               
}

Я пробовал несколько способов, все ведущие по одному и тому же треку, и я посмотрел на каждый связанный с ним вопрос о переполнении стека, меня нет.

Любая помощь была бы весьма признательна, заблаговременно.

EDIT: (Решено). Я в своей глупости и изучении новой технологии фактически не понимал, что существует разница между LocalStorage и фактическим установленным местоположением, благодаря Робу Каплану, который руководит мной в правильном направлении.

  • 0
    не способ быть украшен Task ключевым словом somethign , как это, например , public static async Task btnDtlsSaveChanges
  • 1
    Вы пытаетесь записать в место установки, которое доступно только для чтения. Вы должны писать только в такие места, как локальная папка .
Показать ещё 2 комментария
Теги:
windows-runtime

3 ответа

0
Лучший ответ

Вы получаете доступ, потому что приложения не имеют права на запись в Package.Current.InstalledLocation.

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

Если вы хотите отправить свое приложение с исходным файлом данных и затем обновить приложение с пользовательскими данными во время выполнения, вы можете скопировать его из InstalledLocation в LocalFolder при первом запуске.

См. Данные приложения (приложения Runtime Windows) и доступ к данным приложения с помощью среды выполнения Windows (приложения Windows Runtime)

  • 0
    Я использовал методы LocalFolder и InstalledLocation, просто не хотел включать весь код, который я здесь пробовал, иначе это был бы очень длинный пост.
0

Я использовал кнопку для тестирования

После нажатия кнопки файл будет пустым.
Вам нужно использовать FileMode.Create, он создаст новый файл или перезапишет его.

    private void button1_Click(object sender, EventArgs e)
    {
        using (FileStream NewFileStream = new FileStream(@"C:\Users\Crea\Documents\TCP.txt", FileMode.Create))
        { }
        //using (StreamWriter sw = new StreamWriter(@"C:\Users\Crea\Documents\TCP.txt", true))
        //    {
        //    sw.WriteLine("Hello");
        //    }
    }
  • 0
    Пространство имен Filestream не поддерживается в WinRT, иначе я бы это сделал давно. Спасибо за усилия, хотя.
0

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

using (StreamWriter sw = new StreamWriter("UserDetails.txt", false))
{
    sw.WriteLine("Hello world");
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню