我需要同步写一个文件,我知道有一些方法可以做异步,但这不是我的情况。
从其他page.xml导航后,我来到我的主页面,在onnavigated方法中,我需要在file.txt中写入我从上一页获取的文本。 (这就是我想如何从应用程序的第一次打开中保存数据,每次应用程序打开它都会加载这些数据而不再制作教程)
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Regione = e.Parameter as regione;
string ciccio = "" + Regione2.RegNome.ToString() + "," + Regione2.RegLat.ToString() + "," + Regione2.regLon.ToString();
//File.WriteAllText("Data/data1.txt", ciccio);
File.WriteAllText("C:/Users/giuli/Documents/Source/xxx/XXX/XXX/Data/data1.txt", ciccio);
}
如果我尝试使用File.WriteAllText("C:/Users/giuli/Documents/Source/xxx/XXX/XXX/Data/data1.txt", ciccio);
我得到一个例外,告诉我我不能使用同步方法:
"不应在UI线程上执行同步操作。考虑在Task.Run中包装此方法。"
好,但我需要,我尝试File.WriteAllText("Data/data1.txt", ciccio);
我得到了一个
System.UnauthorizedAccessException的:
访问被拒绝的路径
如果我尝试使用某种异步方法
Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
StorageFile File2 = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Data/data1.txt"));
await Windows.Storage.FileIO.WriteTextAsync(File2, ciccio1);
我得到了一个
System.UnauthorizedAccessException:' Accesso negato
我通过visual studio创建了文件data.txt,它在VS上没有打开,我想没有人知道该文件存在而不是VS.
我怎么能最终写上那个文件?
谢谢。)
"读同步和异步方法完美无缺,因此它不是路径问题
Regione.RegNome = File.ReadAllText("Data/data1.txt");
"
答案 0 :(得分:2)
除了说明不从UI线程调用同步API的错误之外,您所拥有的其他任何错误都与API同步或异步无关。它们看起来都像是合法错误,因为应用程序无权写入它尝试写入的位置。
使用ApplicationData.RoamingSettings存储您看过的教程标志。您不需要自己在文件中管理它。有关详细信息,请参阅Store and retrieve app settings and data。
ms-appx:///Data/data1.txt上的UnauthorizedAccessException是因为应用程序的安装位置是只读的。同步与异步在这里并不相关:读取但不从此位置写入预计会起作用。安装位置也在用户之间共享,因此即使应用程序可以在此处写入,也不会成为用户特定数据(如see-the-tutorial标志)的好地方。如果要将其存储在可写的特定于用户的文件中,请使用ApplicationData.LocalFolder或RoamingFolder,如Store and retrieve app settings and data中所述
该应用无法直接访问Documents文件夹。有了适当的功能,它可以通过StorageFile类获得对该文件夹的代理访问,但是应用程序不能使用System.IO.File直接访问。