[英]synchronous write on a file different exceptions and access denied
我需要同步写入文件,我知道有一些方法可以做到异步,但这不是我的情况。
从另一个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");
并不是问题Regione.RegNome = File.ReadAllText("Data/data1.txt");
除了错误消息说不从UI线程调用同步API之外,您遇到的其他任何错误均与该API是同步还是异步有关。 它们都看起来像合法错误,因为该应用无权对其尝试写入的位置进行写入。
使用ApplicationData.RoamingSettings来存储您的教程可见标志。 您无需自己在文件中进行管理。 有关详细信息,请参见存储和检索应用程序设置和数据 。
ms-appx:///Data/data1.txt上的UnauthorizedAccessException是因为应用程序的安装位置是只读的。 同步与异步在这里无关紧要:从该位置读取但不写入是可以的。 安装位置也在用户之间共享,因此即使应用程序可以在此处编写,对于用户特定的数据(例如,“ see-the-tutorial”标志)也不是一个好地方。 如果要将其存储在用户可写的可写文件中,请按照存储中所述使用ApplicationData.LocalFolder或RoamingFolder 并检索应用程序设置和数据
该应用无法直接访问“文档”文件夹。 有了适当的功能,它可以通过StorageFile类对该文件夹进行代理访问,但该应用将无法使用System.IO.File直接访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.