Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcje ReadFile i WriteFile lub funkcje ReadConsole i WriteConsole umożliwiają aplikacji odczytywanie danych wejściowych konsoli i zapisu danych wyjściowych konsoli jako strumienia znaków. Funkcja ReadConsole i WriteConsole zachowują się dokładnie tak jak ReadFile i WriteFile , z tą różnicą, że mogą być używane jako funkcje szerokiego znaku (w których argumenty tekstowe muszą używać formatu Unicode) lub jako funkcje ANSI (w których argumenty tekstowe muszą używać znaków z zestawu znaków systemu Windows). Aplikacje, które muszą obsługiwać pojedynczy zestaw źródeł do obsługi formatu Unicode lub zestawu znaków ANSI, powinny używać opcji ReadConsole i WriteConsole.
Polecenia ReadConsole i WriteConsole mogą być używane tylko z dojściami konsoli; Pliki ReadFile i WriteFile mogą być używane z innymi uchwytami (takimi jak pliki lub potoki). Tryb ReadConsole i WriteConsole kończą się niepowodzeniem, jeśli jest używany ze standardowym dojściem, który został przekierowany i nie jest już dojściem konsoli.
Aby uzyskać dane wejściowe klawiatury, proces może używać pliku ReadFile lub ReadConsole z uchwytem do buforu wejściowego konsoli lub może użyć pliku ReadFile do odczytu danych wejściowych z pliku lub potoku, jeśli STDIN został przekierowany. Te funkcje zwracają tylko zdarzenia klawiatury, które można przetłumaczyć na znaki ANSI lub Unicode. Dane wejściowe, które można zwrócić, obejmują kombinacje sterowania. Funkcje nie zwracają zdarzeń klawiatury z udziałem funkcji ani strzałek. Zdarzenia wejściowe generowane przez mysz, okno, fokus lub dane wejściowe menu są odrzucane.
Jeśli tryb wprowadzania wiersza jest włączony (tryb domyślny), readFile i ReadConsole nie wracają do aplikacji wywołującej do momentu naciśnięcia ENTER. Jeśli tryb wprowadzania wiersza jest wyłączony, funkcje nie są zwracane, dopóki nie będzie dostępny co najmniej jeden znak. W obu trybach wszystkie dostępne znaki są odczytywane do momentu, aż nie będą dostępne żadne klucze lub określona liczba znaków zostanie odczytana. Nieprzeczytane znaki są buforowane do następnej operacji odczytu. Funkcje raportują całkowitą liczbę znaków faktycznie odczytanych. Jeśli tryb wprowadzania echa jest włączony, znaki odczytywane przez te funkcje są zapisywane w aktywnym buforze ekranu w bieżącym położeniu kursora.
Proces może użyć metody WriteFile lub WriteConsole do zapisu w aktywnym lub nieaktywnym buforze ekranu albo może użyć funkcji WriteFile do zapisu w pliku lub potoku, jeśli przekierowano element STDOUT. Przetworzony tryb danych wyjściowych i zawijanie w trybie wyjściowym EOL steruje sposobem zapisywania lub echo w buforze ekranu.
Znaki zapisywane przez funkcję WriteFile lub WriteConsole albo powtórzone przez plik ReadFile lub ReadConsole są wstawiane w buforze ekranu na bieżącym położeniu kursora. Gdy każdy znak jest zapisywany, pozycja kursora przechodzi do następnej komórki znaku; jednak zachowanie na końcu wiersza zależy od zawijania buforu ekranu konsoli w trybie wyjściowym EOL.
Dalsze szczegółowe informacje na temat położenia kursora można znaleźć za pośrednictwem sekwencji terminali wirtualnych, w szczególności w kategorii stanu zapytania w celu znalezienia bieżącej pozycji i kategorii pozycjonowania kursora w celu ustawienia bieżącej pozycji. Alternatywnie aplikacja może użyć funkcji GetConsoleScreenBufferInfo , aby określić bieżące położenie kursora i funkcję SetConsoleCursorPosition , aby ustawić położenie kursora. Jednak mechanizm sekwencji terminali wirtualnych jest preferowany dla wszystkich nowych i ciągłych programowania. Więcej szczegółowych informacji na temat strategii dotyczącej tej decyzji można znaleźć w dokumentacji dotyczącej funkcji klasycznych, a także w dokumentacji dotyczącej terminalu wirtualnego i ekosystemu .
Przykład użycia funkcji we/wy konsoli wysokiego poziomu można znaleźć w temacie Using the High-Level Input and Output Functions (Korzystanie z funkcji wejścia/wyjścia High-Level).