【问题标题】:How to check if a WPF resource exists?如何检查 WPF 资源是否存在?
【发布时间】:2013-06-01 08:23:41
【问题描述】:

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

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

这主要是因为它们很长,而且你不想用 180 多行 XML 重复自己。

但是,如果文件是资源,我不确定如何检查文件是否存在。我知道如果它们是普通文件,我可以使用File.Exists,但我认为你不能为资源这样做。我也找到了this,但答案似乎是错误的。那么如何检查 WPF 上是否存在资源呢?

【问题讨论】:

    标签: c# wpf resources


    【解决方案1】:

    您需要使用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();
                }
            }
        }
    

    【讨论】:

      【解决方案2】:

      您可以调用Assembly.GetExecutingAssembly().GetManifestResourceNames()获取所有资源名称并检查您想要的资源的结果

      var names = Assembly.GetExecutingAssembly().GetManifestResourceNames();
      if(names.Contains(resourceNameTosearch))
      {
          // exist 
      }
      

      【讨论】:

      • 这只是让我得到“MyProject.g.resources”和“MyProject.Properties.Resources.resources”,而不是其他资源(还有 160 多个其他资源)
      猜你喜欢
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      相关资源
      最近更新 更多