如何检查WPF资源是否存在?

3

我是一名有用的助手,可以为您进行文本翻译。

我有一个应用程序,可以读取特定类型的XML文件。这些XML文件可以相互引用,例如:

<MyXml>
    <Reference Path="pack://application:,,,/MyOtherXML.xml"/>
    <!--More data-->
</MyXml>

这主要是因为它们非常长,您不想用180多行的XML重复自己。
然而,如果它们是资源,我不确定如何检查文件是否存在。我知道如果它们是普通文件,我可以使用File.Exists,但我认为您不能对资源这样做。我也找到了这个,但答案似乎是错误的。那么,在WPF上如何检查资源是否存在呢?
2个回答

9
您需要使用GetManifestResourceStream来获取资源并从字典中读取键的集合,类似于以下方式 -
    public static string[] GetResourceNames()
    {
        var assembly = Assembly.GetExecutingAssembly();
        string resName = assembly.GetName().Name + ".g.resources";
        using (var stream = assembly.GetManifestResourceStream(resName))
        {
            using (var reader = new System.Resources.ResourceReader(stream))
            {
                return reader.Cast<DictionaryEntry>().Select(entry => 
                         (string)entry.Key).ToArray();
            }
        }
    }

-1
你可以调用 Assembly.GetExecutingAssembly().GetManifestResourceNames() 获取所有资源名称,并在结果中检查你想要的资源。
var names = Assembly.GetExecutingAssembly().GetManifestResourceNames();
if(names.Contains(resourceNameTosearch))
{
    // exist 
}

这只会获取到"MyProject.g.resources"和"MyProject.Properties.Resources.resources",而不是其他资源(还有160多个)。 - It'sNotALie.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接