2010-04-21 2 views
0

Я использую forstream() для записи данных в файл, я хочу, чтобы программа выполняла такой способ, чтобы она продолжала вставлять строку в файл, как только value получает привязку к строковой переменной, и ее нужно направить перед вызовом функции close().записывая строку в файл перед вызовом close()

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

может кто-нибудь помочь мне сделать это в C++ .........

+0

Слишком расплывчато - вам нужно дать конкретный пример того, чего вы надеетесь достичь. –

+0

Я получаю нажатия клавиш на клавиатуре, и я хочу, чтобы он был сохранен в файле ... поэтому, когда когда-либо нажата клавиша, я хочу, чтобы она была записана в файл ........ – Navin

+0

добавьте эту дополнительную информацию в свой вопрос и сделайте весь вопрос немного яснее, пока вы на нем. Таким образом, вы, скорее всего, получите хорошие ответы. –

ответ

4

вызова flush() на ofstream после записи в него. Это приведет к тому, что вывод будет фактически записан вместо буферизации.

0

стандарт C++ не имеет возможности читать отдельные нажатия клавиш с клавиатуры (который я думаю, о чем вы спрашиваете). Для этого вам нужно будет использовать специальные функции операционной системы и/или C++.

+0

@Neil Butterworth: спасибо за ваш ответ ... я захватил нажатия клавиш, просто хочу, чтобы он был записан в файл, как только я захватил нажатия клавиш, но не в конце программы ... – Navin

0

Ну, один из вариантов заключается в том, чтобы висеть на объект std :: ofstream на время работы программы, записывая его по мере необходимости, а затем закрывая его в самом конце программы. Другой вариант - открыть файл в режиме добавления каждый раз, когда вы хотите что-то записать и закрыть файл сразу после ведения журнала. Второй вариант, вероятно, будет медленнее, чем первый, особенно если вы часто регистрируетесь. Если ведение журнала происходит нечасто, второй вариант имеет то преимущество, что вы не запрещаете ОС (особенно если это Windows) делать то, что может захотеть сделать с этим файлом. Тем не менее, я умоляю вас не писать еще один кейлоггер ... есть слишком много из тех вещей, которые там уже существуют ... и большинство применений далеки от законных.

0

Вы можете создать подкласс зОго :: строки, так что он пишет в данном станд :: ofstream каждый раз, когда кто-то делает задание на нем:

#include <fstream> 
#include <string> 

class foo : public std::string 
{ 
    std::ofstream& ofs; 

public: 
    foo(std::ofstream& ofs) : ofs(ofs) { } 

    foo& operator=(const std::string& string) 
    { 
     using namespace std; 

     if (ofs) 
      ofs << string << endl; 
    } 
}; 

int main() 
{ 
    std::ofstream ofs("test.txt"); 
    foo test(ofs); 

    test = "Write this to a file"; 
    ofs.close(); 
    test = "This won't be written"; 
} 
Смежные вопросы