如何检查XAP中的文件是否存在?

时间:2011-06-17 15:11:25

标签: c# windows-phone-7

我正在编写一个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中不可用。我可以为手机支持的每种文化创建一个虚拟文件,但这非常难看,容易出错并且不允许回退到中性语言。有什么想法吗?

3 个答案:

答案 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;