IN c#如何从资源文件夹中获取以前缀开头的文件名

时间:2012-02-29 13:15:17

标签: c# resources

如何根据前缀

访问文本文件
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必须被访问。

2 个答案:

答案 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);