我正在编写一个Windows Phone 7应用程序,它从XAP中部署的XML文件中加载样本数据。这些XML文件是本地化的,因此支持的每种文化都存档。
结构:
SampleData.xml
SampleData.de.xml
SampleData.fr.xml
SampleData.it.xml
...
要加载的XML的名称基于当前的UI文化。构建文件名很容易,但如何检查当前UI文化的本地化版本是否存在?
System.IO.File.Exists()在Windows Phone 7中不可用。我可以为手机支持的每种文化创建一个虚拟文件,但这非常难看,容易出错并且不允许回退到中性语言。有什么想法吗?
答案 0 :(得分:3)
private bool IsFileExists(string relativePath)
{
return Application.GetResourceStream(new Uri(relativePath, UriKind.Relative)) != null;
}
relativePath不应以斜杠
开头答案 1 :(得分:2)
AFAIK无法枚举XAP文件中包含的文件。由于您是创建XAP的人,因此您应该知道哪些文件存在以及哪些文件不存在。如果您尝试加载本地化版本,或者如果前者不存在则回退到默认版本,那么,您可以创建另一个列出所有可用本地化版本的文件,而不是枚举软件包中的文件。
或者,您可以在try-catch中使用XDocument.Load()
之类的内容。它可能会抛出你可以处理的FileNotFoundException
,然后加载默认版本。
答案 2 :(得分:1)
如果文件标记为构建操作“资源”,那么您必须在本地路径前添加“/; component /”字符串以成功加载资源。
return Application.GetResourceStream(new Uri("/PhoneProject1;component/" + relativePath, UriKind.Relative)) != null;