Реестр C # (Как убрать интервал между буквами из массива)? - PullRequest
0 голосов
/ 13 декабря 2010

Эти коды позволяют мне получить доступ к реестру и получить значения последних посещенных MRU в нечитаемом формате.То, что я сделал здесь, состояло в том, чтобы преобразовать их в читаемый формат.Я поместил их в массив и вывел на консоль.

Вывод выглядит так:
C : \ P r o g r a m F i l e s \ i P o d \ f i l e . t x t

Как мне удалить интервалы между ними?* Заранее спасибо.

try
        {
            RegistryKey rk = Registry.CurrentUser;

            rk = rk.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU", false);
            PrintKeys(rk);
        }

        catch (Exception MyError)
        {
            Console.WriteLine("An error has occurred: " + MyError.Message);
        }
    }

    static void PrintKeys(RegistryKey rk)
    {
        if (rk == null)
        {
            Console.WriteLine("No specified registry key!");
            return;
        }

        String[] names = rk.GetValueNames();

        Console.WriteLine("Subkeys of " + rk.Name);
        Console.WriteLine("-----------------------------------------------");

        foreach (String s in names)
        {
            try
            {
                if (s == "MRUList")
                {
                    continue;
                }

                else
                {
                    try
                    {
                        Byte[] byteValue = (Byte[])rk.GetValue(s);

                        string str = BitConverter.ToString(byteValue).Replace("00", "");

                        str = BitConverter.ToString(byteValue).Replace("-", "");
        //str binry AND VAR CONVERTED TEXT

                        Console.WriteLine(s + " Contains the value of : " + str);

                        StringBuilder sb = new StringBuilder();

                        for (int i = 0; i <= str.Length - 2; i += 2)
                        {
                            sb.Append(Convert.ToString(Convert.ToChar(Int32.Parse(str.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
                        }

                        String val = Convert.ToString(sb).Replace(" ", "");

                        Console.WriteLine(s + " Contains the value of : " + val);
                    }

                    catch (Exception Errors)
                    {
                        Console.WriteLine("An error has occurred: " + Errors.Message);
                    }
                }

                //rk.Close();
            }

            catch (Exception MyError)
            {
                Console.WriteLine("An error has occurred: " + MyError.Message);
            }

            Console.WriteLine("-----------------------------------------------");
            //rk.Close();
        }

1 Ответ

0 голосов
/ 13 декабря 2010

В двоичном коде есть кодировка Unicode. Я исправил ваш код и убедился, что он работает на моем XP. Однако он не работает в Windows 7 или Vista, поскольку LastVisitedMRU больше не существует.

    static void Main(string[] args)
    {
        try
        {
            RegistryKey rk = Registry.CurrentUser;
            rk = rk.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU", false);
            PrintKeys(rk);
        }

        catch (Exception ex)
        {
            Console.WriteLine("An error has occurred: " + ex.Message);
        }
    }

    static void PrintKeys(RegistryKey rk)
    {
        if (rk == null)
        {
            Console.WriteLine("No specified registry key!");
            return;
        }

        foreach (String s in rk.GetValueNames())
        {
            if (s == "MRUList")
            {
                continue;
            }
            Byte[] byteValue = (Byte[])rk.GetValue(s);

            UnicodeEncoding unicode = new UnicodeEncoding();
            string val = unicode.GetString(byteValue);

            Console.Out.WriteLine(val);
        }
        Console.ReadLine();
    }
...