簡體   English   中英

從.net庫讀取文本文件資源

[英]Read text file resource from .net library

我有一個在wpf mef應用程序中使用的庫。 該庫中包含許多文件。 其中之一是app.js。

如何從庫中以字符串形式讀取app.js。

PS:從較早的代碼,我可以使用以下代碼訪問/創建位圖圖像:

private readonly BitmapImage _starImageSmall = new BitmapImage(new Uri("pack://application:,,,/MyFirstExtension;component/Star_16x16.png", UriKind.Absolute));

生成Uri后,如何獲得作為系統流的流的訪問權限?

此代碼塊從未使我失敗:

private Stream GetEmbeddedResourceStream(string resourceName)
{
    Assembly assy = Assembly.GetExecutingAssembly();
    string[] res = assy.GetManifestResourceNames();
    for (int i = 0; i < res.Length; i++)
    {
        if (res[i].ToLower().IndexOf(resourceName.ToLower()) != -1)
        {
            return assy.GetManifestResourceStream(res[i]);
        }
    }
    return Stream.Null;
}

此代碼塊需要注意的三件事:

  • 該塊在執行程序集Assembly.GetExecutingAssembly() )上起作用, 而不在調用程序集或任何其他程序集上起作用; 對其進行更改以適應您的需求(請參見下面的替代方法)
  • resourceName應該僅是文件名 (例如,如果文件保存在resources/myRes.bin ,則調用GetEmbeddedResourceStream("myRes.bin")
  • 您的資源必須將其“資源類型”設置為“嵌入式資源”

但是,如果您希望代碼在任意程序集上運行,則可以將代碼塊更改為:

private Stream GetEmbeddedResourceStream(string resourceName)
{
    return GetEmbeddedResourceName(resourceName, Assembly.GetExecutingAssembly());
}
private Stream GetEmbeddedResourceStream(string resourceName, Assembly assembly)
{
    string[] res = assembly.GetManifestResourceNames();
    for (int i = 0; i < res.Length; i++)
    {
        if (res[i].ToLower().IndexOf(resourceName.ToLower()) != -1)
        {
            return assembly.GetManifestResourceStream(res[i]);
        }
    }
    return Stream.Null;
}

您可以使用Assembly.GetManifestResourceStream在程序集中打開資源流。 如果不確定資源名稱,則可以使用Assembly.GetManifestResourceNames枚舉資源名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM