Frage

Vorübergehend umleiten stdout Zu einer Datei mache ich:

printf("Before");
freopen_s(&stream, "test.txt", "w", stdout);
printf("During");
freopen_s(&stream, "CONOUT$", "w", stdout);
printf("After");

Das funktioniert jedoch:

CONSOLE_SCREEN_BUFFER_INFO sbi = {0};
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &sbi);

Scheint nicht mehr zu funktionieren. Es gibt falsch zurück und GetLastError() kehrt zurück 6 Dies führt in die Nachricht "Das Handle ist ungültig". mit FormatMessage.

Irgendwelche Ratschläge, warum der Griff ungültig sein könnte? Interessant, printf funktioniert weiter wie erwartet und SetConsoleTextAttribute funktioniert sogar mit dem gleichen Griff.

War es hilfreich?

Lösung

Ich entdeckte Folgendes hier:

hconsoleoutput [in

Ein Handle zum Konsolenbildschirmpuffer. Der Griff muss über das richtige Zugriff generic_read haben. Weitere Informationen finden Sie in Sicherheit und Zugriffsrechten der Konsolenpuffer.

Ich würde also erwarten, dass das Hinzufügen von Lesezugriff auf die Reöffnung die erwarteten Funktionalität beispielsweise wiederherstellen würde:

printf("Before");
freopen_s(&stream, "test.txt", "w", stdout);
printf("During");
freopen_s(&stream, "CONOUT$", "w+", stdout);
printf("After");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top