我目前正在使用Windows运行时开发一个项目,我遇到了障碍,这种情况总是很容易做到,而且我觉得因为没有做到这一点感到非常沮丧。
我已经坐了几个小时,我似乎无法做对。我得到了“访问被拒绝错误”,当我点击按钮时,在我的代码的某些变体中,没有任何反应。我觉得答案是正确地盯着我。这是代码:
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");
}
我已经尝试了几种方式,都是沿着同一条轨道前进的,我已经查看了堆栈溢出的所有相关问题,没有什么能让我到那里。
非常感谢任何帮助,提前谢谢。
编辑:(已解决)我的愚蠢和新技术的学习并没有真正意识到LocalStorage和实际安装位置之间存在差异,这要归功于Rob Caplan指导我正确的方向。 / p>答案 0 :(得分:0)
我不知道您使用等待的原因,但以下代码应该可以为您清除文件内容
using (StreamWriter sw = new StreamWriter("UserDetails.txt", false))
{
sw.WriteLine("Hello world");
}
答案 1 :(得分:0)
您获得拒绝访问权限,因为应用程序不具有对Package.Current.InstalledLocation的写入权限。
对于写入权限,您需要使用应用程序数据文件夹,例如Windows.Storage.ApplicationData.Current.LocalFolder
如果您希望使用初始数据文件发布应用程序,然后在运行时使用用户数据更新应用程序,则可以在首次运行时将其从InstalledLocation复制到LocalFolder。
请参阅App data (Windows Runtime apps)和Accessing app data with the Windows Runtime (Windows Runtime apps)
答案 2 :(得分: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");
// }
}