我知道有很多关于获得
的问题“System.UnauthorizedAccessException的”。
但是,我无法在任何这些问题中找到解决方案,因为大多数答案都会引用其中一个Microsoft帮助页面。
我的情况: 我尝试将一些用户输入保存为.csv,因此我可以在需要时导入它。
我的代码:
var csv = new System.Text.StringBuilder();
string dir = Path.Combine(Environment.GetFolderPath
(Environment.SpecialFolder.DesktopDirectory), "test.csv");
var newLine = string.Format("{0},{1},{2},{3},{4}", txtFirstName.Text, txtLastName.Text, txtEmail.Text,
txtPhone.Text, txtPlace.Text);
csv.AppendLine(newLine);
if (!File.Exists(dir))
{
using (FileStream fs = File.Create(dir))
{
Byte[] info = new System.Text.UTF8Encoding(true).GetBytes("FirstName,LastName,Email,Phone,Place");
// Add headers to the file.
fs.Write(info, 0, info.Length);
}
}
try
{
File.AppendAllText(dir, csv.ToString());
}
catch (Exception ex)
{
throw ex;
}
正如您所看到的,我正在尝试将所有内容写入我的桌面,名为“test.csv”。我以管理员身份运行Visual Studio,而我桌面上的文件不是只读的。 anybodoy知道为什么这仍然失败?
编辑:我在桌面计算机上将其作为标准UWP-App运行。
答案 0 :(得分:2)
从UWP流程文件访问受到限制。要写入桌面(或任意位置),您的应用程序将需要使用文件保存对话框并让用户确认/选择位置。然后,您将能够保存到桌面或用户决定选择的任何位置。
在即将推出的针对Windows 10的Spring 2018更新中,我们将为UWP应用程序引入一项新功能(' broadFileSystemAccess'),以便更好地实现这一目标。如果您在清单中声明此功能,应用程序将在首次启动时请求用户同意以进行广泛的文件系统访问,然后您将能够访问当前用户有权访问的所有位置。
如果您需要适用于早期版本的Windows 10(在2018年春季更新之前)的解决方案,并且文件对话框不是一个可行的选项,那么您可以考虑在处理文件操作的UWP包中添加一个完整的进程代表您的UWP流程。您可以通过FullTrustProcessLauncher API从UWP启动该完整信任流程:https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.fulltrustprocesslauncher