В c # как получить имена файлов, начинающиеся с префикса из папки ресурсов - PullRequest
4 голосов
/ 29 февраля 2012

как получить доступ к текстовому файлу на основе его префикса

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 ]

8 голосов
/ 29 февраля 2012

Используйте класс DirectoryInfo ( документация ).Затем вы можете вызвать 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 , в противном случае вам придется перебирать подходящие файлы в моем предыдущем примере.

2 голосов
/ 29 февраля 2012

Ваш вопрос довольно расплывчатый ... но похоже, что вы хотите получить текстовое содержимое встроенного ресурса. Обычно вы делаете это, используя 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...