如何根据前缀
访问文本文件var str = GrvGeneral.Properties.Resources.ResourceManager.GetString(configFile + "_Nlog_Config");
var str1 = GrvGeneral.Properties.Resources.ResourceManager.GetObject(configFile + "_Nlog_Config");
其中configfile是资源文件A&的前缀。 B。
基于配置文件内容(前缀),资源文件A& B必须被访问。
答案 0 :(得分:8)
使用DirectoryInfo
班级(documentation)。然后,您可以使用搜索模式调用GetFiles
。
string searchPattern = "abc*.*"; // This would be for you to construct your prefix
DirectoryInfo di = new DirectoryInfo(@"C:\Path\To\Your\Dir");
FileInfo[] files = di.GetFiles(searchPattern);
修改:如果你有办法构建你正在寻找的实际文件名,你可以直接转到FileInfo class,否则你将不得不迭代在我之前的例子中匹配文件。
答案 1 :(得分:2)
你的问题相当含糊......但听起来你想要获取嵌入资源的文本内容。通常你会使用Assembly.GetManifestResourceStream
来做到这一点。您始终可以使用LINQ和Assembly.GetManifestResourceNames()
来查找与模式匹配的嵌入文件的名称。
ResourceManager
类更常用于自动检索本地化字符串资源,例如不同语言的标签和错误消息。
更新:一个更通用的例子:
internal static class RsrcUtil {
private static Assembly _thisAssembly;
private static Assembly thisAssembly {
get {
if (_thisAssembly == null) { _thisAssembly = typeof(RsrcUtil).Assembly; }
return _thisAssembly;
}
}
internal static string GetNlogConfig(string prefix) {
return GetResourceText(@"Some\Folder\" + prefix + ".nlog.config");
}
internal static string FindResource(string pattern) {
return thisAssembly.GetManifestResourceNames()
.FirstOrDefault(x => Regex.IsMatch(x, pattern));
}
internal static string GetResourceText(string resourceName) {
string result = string.Empty;
if (thisAssembly.GetManifestResourceInfo(resourceName) != null) {
using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName)) {
result = new StreamReader(stream).ReadToEnd();
}
}
return result;
}
}
使用示例:
string aconfig = RsrcUtil.GetNlogConfig("a");
string bconfigname = RsrcUtil.FindResource(@"b\.\w+\.config$");
string bconfig = RsrcUtil.GetResourceText(bconfigname);