В настоящее время я работаю над проектом с использованием 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 и фактическим установленным местоположением, благодаря Робу Каплану, который руководит мной в правильном направлении.
Вы получаете доступ, потому что приложения не имеют права на запись в Package.Current.InstalledLocation.
Для доступа на запись вам необходимо использовать папки данных приложений, такие как Windows.Storage.ApplicationData.Current.LocalFolder
Если вы хотите отправить свое приложение с исходным файлом данных и затем обновить приложение с пользовательскими данными во время выполнения, вы можете скопировать его из InstalledLocation в LocalFolder при первом запуске.
См. Данные приложения (приложения Runtime Windows) и доступ к данным приложения с помощью среды выполнения Windows (приложения Windows Runtime)
Я использовал кнопку для тестирования
После нажатия кнопки файл будет пустым.
Вам нужно использовать 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");
// }
}
Я не знаю, почему вы используете ожидание, но следующий код должен иметь возможность очистить содержимое файла для вас
using (StreamWriter sw = new StreamWriter("UserDetails.txt", false))
{
sw.WriteLine("Hello world");
}
Task
ключевым словом somethign , как это, например ,public static async Task btnDtlsSaveChanges