Получение заголовка/описания Windows System Error Code от его шестнадцатеричного числа

Вот тот, который я написал за десять минут. Он не использует регулярные выражения, только простые итерации. Я не думаю, что это может быть улучшено, чтобы быть намного быстрее.

public static String unescape(final String text) {
    StringBuilder result = new StringBuilder(text.length());
    int i = 0;
    int n = text.length();
    while (i < n) {
        char charAt = text.charAt(i);
        if (charAt != '&') {
            result.append(charAt);
            i++;
        } else {
            if (text.startsWith("&amp;", i)) {
                result.append('&');
                i += 5;
            } else if (text.startsWith("&apos;", i)) {
                result.append('\'');
                i += 6;
            } else if (text.startsWith("&quot;", i)) {
                result.append('"');
                i += 6;
            } else if (text.startsWith("&lt;", i)) {
                result.append('<');
                i += 4;
            } else if (text.startsWith("&gt;", i)) {
                result.append('>');
                i += 4;
            } else i++;
        }
    }
    return result.toString();
}
32
задан EJoshuaS - Reinstate Monica 29 June 2017 в 15:57
поделиться

2 ответа

Я не уверен, есть ли отличная оболочка .NET, но вы можете вызвать API FormatMessage с помощью P / Invoke.

См. этот ответ , чтобы узнать, как это обычно вызывается из собственного кода. Хотя вопрос относится к получению кодов ошибок из HRESULT, ответ также относится к получению кодов из обычных кодов ошибок ОС, поступающих из GetLastError / GetLastWin32Error).

РЕДАКТИРОВАТЬ: Спасибо, Малфист, что указал мне на pinvoke.net, который включает альтернативу, управляемый API:

using System.ComponentModel;

string errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message;
Console.WriteLine(errorMessage);
96
ответ дан 27 November 2019 в 19:58
поделиться

Да, есть функция, которая это делает, но я не помню, что это такое. В то же время вы можете использовать инструмент поиска ошибок (Инструменты-> Поиск ошибок), чтобы увидеть, что означает конкретный код из Visual Studio.

-4
ответ дан 27 November 2019 в 19:58
поделиться