【发布时间】:2012-08-25 11:32:32
【问题描述】:
我有一个 WinRT Metro 项目,它根据所选项目显示图像。但是,某些选择的图像将不存在。我想要做的是捕获它们不存在的情况并显示替代方案。
到目前为止,这是我的代码:
internal string GetMyImage(string imageDescription)
{
string myImage = string.Format("Assets/MyImages/{0}.jpg", imageDescription.Replace(" ", ""));
// Need to check here if the above asset actually exists
return myImage;
}
示例调用:
GetMyImage("First Picture");
GetMyImage("Second Picture");
所以Assets/MyImages/SecondPicture.jpg 存在,但Assets/MyImages/FirstPicture.jpg 不存在。
起初我想使用 File.Exists() 的 WinRT 等效项,但似乎没有。不必去尝试打开文件并捕获错误的程度,我可以简单地检查文件是否存在,或者文件是否存在于项目中?
【问题讨论】:
-
您认为存在的资产实际上并不存在,这应该是例外。所以抓住异常。
-
@HansPassant 我认为他不认为它们存在。他提前知道它们有可能不存在。
-
非常同意@mydogisbox。 ExistsAsyncs() 自开发预览版以来一直在讨论,但尚未进入。我仍然很想听听背后的论点...
-
我只是在我的工具包中查看了类似的problem,并认为 Exists 方法不存在真是令人遗憾。关于竞争条件和方法的所有这些都是一种不好的做法——那些不应该改变并且实际上永远不会改变的应用程序资产呢?我想检查我的 appx 中的文件,但除了尝试打开这些文件并在它们丢失时捕获异常之外,我找不到其他选择,这真的很难看。也许 ResourceManager 可以帮助找到它们?
-
发现了一些关于 ResourceManager 的东西。您可以像这样检查应用程序包中的文件: ResourceManager.Current.MainResourceMap.ContainsKey("Files/Assets/Logo.png") 或 ResourceManager.Current.MainResourceMap.ContainsKey("Files/WinRTXamlToolkit/Themes/Generic.xaml" ) - 对于来自引用库的文件。这具有处理合格资源的额外好处 - 例如可能已在名称中添加了比例限定符但在基本不合格名称中不存在的图像 - 例如Logo.png 与 Logo.scale-100.png、Logo.scale-140.png、Logo.scale-180.png 等。
标签: windows-8 windows-runtime windows-store-apps