Байт [] из реестра возвращает только одно письмо - PullRequest
2 голосов
/ 13 августа 2011

Я пытаюсь прочитать данные из реестра @ "" ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion \ Explorer \ RecentDocs \ "

Возвращаемое значение - System.byte [], когда я преобразуюэто к строке, как предложено здесь .

Это работает (я думаю). Но я получаю только 1 письмо, а не всю строку.

Возможно, ячто-то не так? Я вполне уверен, что там не может быть только одна буква ..

Я пробовал Encoding.ASCII.GetString(bytes); и Encoding.UTF8.GetString(bytes); и Encoding.Default.GetString(bytes);, но все это возвращает только 1 символ /письмо.

Я также извлек эту ссылку , но это для C ++, и я использую C # и не вижу того метода, который они предложили (RegGetValueA)

Вот мой код:

        RegistryKey pRegKey = Registry.CurrentUser;
        pRegKey = pRegKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RecentDocs\\");
        Object val = pRegKey..GetValue("0");

        byte[] bytes = (byte[])pRegKey.GetValue ("0");
        string str = Encoding.ASCII.GetString(bytes);

        System.Windows.MessageBox.Show("The value is: " + str);

Заранее благодарен за любую помощь:)

Ответы [ 2 ]

3 голосов
/ 13 августа 2011

Строка кодируется с использованием UTF-16, поэтому вы должны использовать Encoding.Unicode.

Но не похоже, что это просто строки в кодировке UTF-16, есть еще данные. Для меня (при декодировании как UTF-16) он отображается как

Stažené soubory□Š6□□□□□Stažené soubory.lnk□T□□뻯□□□□*□□□□□□□□□□□□Stažené soubory.lnk□6□

Stažené soubory означает «Загрузки» на чешском языке, который является языком моей Windows. А квадраты U + 25A1 в вышеприведенном тексте на самом деле равны нулю.

2 голосов
/ 13 августа 2011

Вы уверены, что кодировка ASCII?

Я подозреваю, что некоторые UTF, как Encoding.UTF8 или Encoding.Unicode - попробуйте ...

...