2011-11-21 77 views
30

在我的解決方案中,有一個包含少量文件的文件夾。所有這些文件都有Build Action「Embedded Resource」。列出文件夾中的所有嵌入式資源

有了這個代碼,我可以得到一個文件:

assembly.GetManifestResourceStream(assembly.GetName().Name + ".Folder.File.txt"); 

但是,有沒有什麼辦法讓這個文件夾中的所有文件*.txt?一列名稱或一個方法遍歷它們都是?

回答

60

你可以檢查出

assembly.GetManifestResourceNames() 

返回的所有資源字符串數組包含。然後,您可以過濾該列表以查找作爲嵌入式資源存儲的所有*.txt文件。

查看MSDN docs for GetManifestResourceNames瞭解詳情。

1

試試這個。這裏你得到所有文件

string[] embeddedResources = Assembly.GetAssembly(typeof(T)).GetManifestResourceNames(); 

T當然是你的類型。所以你可以使用它的通用

-3

就破獲這一點,使用:

Assembly _assembly; 
_assembly = Assembly.GetExecutingAssembly(); 
List<string> filenames = new List<string>(); 
filenames = _assembly.GetManifestResourceNames().ToList<string>(); 
List<string> txtFiles = new List<string>(); 
for (int i = 0; i < filenames.Count(); i++) 
{ 
    string[] items = filenames.ToArray(); 
    if (items[i].ToString().EndsWith(".txt")) 
    { 
     txtFiles.Add(items[i].ToString()); 
    } 
} 
+3

「只是破解了這個」。那花了18個月? :) –

+3

first filenames = ToList()然後對於每個文件名items = filenames.ToArray()???然後string.ToString()???你在跟我開玩笑嗎? – sasjaq

9

試試這個,返回將所有.TXT文件內部數組文件夾目錄。

private string[] GetAllTxt() 
{ 
    var executingAssembly = Assembly.GetExecutingAssembly(); 
    string folderName = string.Format("{0}.Resources.Folder", executingAssembly.GetName().Name); 
    return executingAssembly 
     .GetManifestResourceNames() 
     .Where(r => r.StartsWith(folderName) && r.EndsWith(".txt")) 
     //.Select(r => r.Substring(constantResName.Length + 1)) 
     .ToArray(); 
} 

注意:取消註釋//.Select(...行以獲取文件名。