System.UnauthorizedAccessException C# Windows 10 Phone 模拟器
System.UnauthorizedAccessException C# Windows 10 Phone Emulator
我知道有很多讨论看似相同的问题,但我无法在 3 小时后解决这个问题,所以我真的需要一些帮助。
我知道我收到此错误是因为系统无法访问该文件。我已尝试将权限设置为完整和其他一些代码片段来解决我的问题,但 none 有效。
这是一个使用 Xaramin 的 windows 10 应用程序,
我正在尝试用 XML 文件中的联系人填充列表框。我将列表框 itemsSource 设置为 "Data Context" 和路径 "myList"。 XML 构建操作设置为 "Content",复制到输出目录设置为 "Copy Always"。
我尝试按照初学者课程中的教程进行 3 次尝试,但总是遇到相同的错误。
这是我遇到的错误
下面是页面上的全部代码。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using System.Xml;
using System.Xml.Linq;
using Windows.Storage;
using System.Collections.ObjectModel;
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace ContactsApp
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
string TEMPFILEPATH = "";
string TARGETFILEPATH = "";
private ObservableCollection<string> lstd = new ObservableCollection<string>();
public ObservableCollection<string> myList { get { return lstd; } }
public MainPage()
{
this.InitializeComponent();
}
private void Grid_Loading(FrameworkElement sender, object args)
{
Windows.ApplicationModel.Package package = Windows.ApplicationModel.Package.Current;
StorageFolder installedLocation = package.InstalledLocation;
StorageFolder targetLocation = ApplicationData.Current.LocalFolder;
TEMPFILEPATH = installedLocation.Path.ToString() + "\Contacts.xml";
TARGETFILEPATH = targetLocation.Path.ToString() + "\Contacts.xml";
File.Move(TEMPFILEPATH, TARGETFILEPATH);
loadContacts();
}
private void loadContacts()
{
XmlReader xmlReader = XmlReader.Create(TARGETFILEPATH);
while (xmlReader.Read())
{
if (xmlReader.Name.Equals("ID") && (xmlReader.NodeType == XmlNodeType.Element))
{
lstd.Add(xmlReader.ReadElementContentAsString());
}
}
DataContext = this;
xmlReader.Dispose();
}
}
}
对于此事的任何帮助,我将永远感激不已。 :)
您不应尝试在受限环境中访问受限路径(例如 Windows Phone)。
相反,如果您确实需要将此文件嵌入到您的应用程序中,请将构建操作更改为 Embedded Resource
并为您的 xml 文件更改为 Do not copy
,然后检索资源在您的代码中作为嵌入式资源:
public void LoadContacts()
{
const string fileName = "Contacts.xml";
var assembly = typeof(MainPage).GetTypeInfo().Assembly;
var path = assembly.GetManifestResourceNames()
.FirstOrDefault(n => n.EndsWith(fileName, StringComparison.OrdinalIgnoreCase));
if(path == null)
throw new Exception("File not found");
using (var stream = assembly.GetManifestResourceStream(path))
using (var reader = XmlReader.Create(stream))
{
while (reader.Read())
{
if (reader.Name.Equals("ID") && (reader.NodeType == XmlNodeType.Element))
{
lstd.Add(reader.ReadElementContentAsString());
}
}
}
DataContext = this; // better to move this inside the constructor
}
我知道有很多讨论看似相同的问题,但我无法在 3 小时后解决这个问题,所以我真的需要一些帮助。
我知道我收到此错误是因为系统无法访问该文件。我已尝试将权限设置为完整和其他一些代码片段来解决我的问题,但 none 有效。
这是一个使用 Xaramin 的 windows 10 应用程序,
我正在尝试用 XML 文件中的联系人填充列表框。我将列表框 itemsSource 设置为 "Data Context" 和路径 "myList"。 XML 构建操作设置为 "Content",复制到输出目录设置为 "Copy Always"。
我尝试按照初学者课程中的教程进行 3 次尝试,但总是遇到相同的错误。
这是我遇到的错误
下面是页面上的全部代码。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using System.Xml;
using System.Xml.Linq;
using Windows.Storage;
using System.Collections.ObjectModel;
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace ContactsApp
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
string TEMPFILEPATH = "";
string TARGETFILEPATH = "";
private ObservableCollection<string> lstd = new ObservableCollection<string>();
public ObservableCollection<string> myList { get { return lstd; } }
public MainPage()
{
this.InitializeComponent();
}
private void Grid_Loading(FrameworkElement sender, object args)
{
Windows.ApplicationModel.Package package = Windows.ApplicationModel.Package.Current;
StorageFolder installedLocation = package.InstalledLocation;
StorageFolder targetLocation = ApplicationData.Current.LocalFolder;
TEMPFILEPATH = installedLocation.Path.ToString() + "\Contacts.xml";
TARGETFILEPATH = targetLocation.Path.ToString() + "\Contacts.xml";
File.Move(TEMPFILEPATH, TARGETFILEPATH);
loadContacts();
}
private void loadContacts()
{
XmlReader xmlReader = XmlReader.Create(TARGETFILEPATH);
while (xmlReader.Read())
{
if (xmlReader.Name.Equals("ID") && (xmlReader.NodeType == XmlNodeType.Element))
{
lstd.Add(xmlReader.ReadElementContentAsString());
}
}
DataContext = this;
xmlReader.Dispose();
}
}
}
对于此事的任何帮助,我将永远感激不已。 :)
您不应尝试在受限环境中访问受限路径(例如 Windows Phone)。
相反,如果您确实需要将此文件嵌入到您的应用程序中,请将构建操作更改为 Embedded Resource
并为您的 xml 文件更改为 Do not copy
,然后检索资源在您的代码中作为嵌入式资源:
public void LoadContacts()
{
const string fileName = "Contacts.xml";
var assembly = typeof(MainPage).GetTypeInfo().Assembly;
var path = assembly.GetManifestResourceNames()
.FirstOrDefault(n => n.EndsWith(fileName, StringComparison.OrdinalIgnoreCase));
if(path == null)
throw new Exception("File not found");
using (var stream = assembly.GetManifestResourceStream(path))
using (var reader = XmlReader.Create(stream))
{
while (reader.Read())
{
if (reader.Name.Equals("ID") && (reader.NodeType == XmlNodeType.Element))
{
lstd.Add(reader.ReadElementContentAsString());
}
}
}
DataContext = this; // better to move this inside the constructor
}