내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

Console 클래스

콘솔 응용 프로그램에 대한 표준 입력, 출력 및 오류 스트림을 나타냅니다. 이 클래스는 상속될 수 없습니다.

네임스페이스:  System
어셈블리:  mscorlib(mscorlib.dll)

public static class Console

Console 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 속성정적 멤버BackgroundColor콘솔의 배경색을 가져오거나 설정합니다.
Public 속성정적 멤버BufferHeight버퍼 영역의 높이를 가져오거나 설정합니다.
Public 속성정적 멤버BufferWidth버퍼 영역의 너비를 가져오거나 설정합니다.
Public 속성정적 멤버CapsLockCaps Lock 키보드 토글의 설정 또는 해제 여부를 나타내는 값을 가져옵니다.
Public 속성정적 멤버CursorLeft버퍼 영역 내에서 커서의 열 위치를 가져오거나 설정합니다.
Public 속성정적 멤버CursorSize문자 셀 내부의 커서 높이를 가져오거나 설정합니다.
Public 속성정적 멤버CursorTop버퍼 영역 내에서 커서의 행 위치를 가져오거나 설정합니다.
Public 속성정적 멤버CursorVisible커서가 표시되는지 여부를 나타내는 값을 가져오거나 설정합니다.
Public 속성정적 멤버XNA Framework에서 지원Error표준 오류 출력 스트림을 가져옵니다.
Public 속성정적 멤버ForegroundColor콘솔의 전경색을 가져오거나 설정합니다.
Public 속성정적 멤버XNA Framework에서 지원In표준 입력 스트림을 가져옵니다.
Public 속성정적 멤버InputEncoding콘솔이 입력을 읽기 위해 사용하는 인코딩을 가져오거나 설정합니다.
Public 속성정적 멤버IsErrorRedirected오류 출력 스트림이 표준 오류 스트림에서 리디렉션되었는지 여부를 나타내는 값을 가져옵니다.
Public 속성정적 멤버IsInputRedirected입력이 표준 입력 스트림에서 리디렉션되었는지 여부를 나타내는 값을 가져옵니다.
Public 속성정적 멤버IsOutputRedirected출력이 표준 출력 스트림에서 리디렉션되었는지 여부를 나타내는 값을 가져옵니다.
Public 속성정적 멤버KeyAvailable입력 스트림에서 키 누름을 사용할 수 있는지 여부를 나타내는 값을 가져옵니다.
Public 속성정적 멤버LargestWindowHeight현재 글꼴 및 화면 해상도에 따라 콘솔 창 행의 가능한 최대 수를 가져옵니다.
Public 속성정적 멤버LargestWindowWidth현재 글꼴 및 화면 해상도에 따라 콘솔 창 열의 가능한 최대 수를 가져옵니다.
Public 속성정적 멤버NumberLockNum Lock 키보드 토글의 설정 또는 해제 여부를 나타내는 값을 가져옵니다.
Public 속성정적 멤버XNA Framework에서 지원Out표준 출력 스트림을 가져옵니다.
Public 속성정적 멤버OutputEncoding콘솔이 출력을 쓰기 위해 사용하는 인코딩을 가져오거나 설정합니다.
Public 속성정적 멤버Title콘솔 제목 표시줄에 표시할 제목을 가져오거나 설정합니다.
Public 속성정적 멤버TreatControlCAsInput Control 보조키와 C 콘솔 키의 조합(Ctrl+C)이 일반 입력 또는 운영 체제에서 처리하는 충돌로 처리되는지 여부를 나타내는 값을 가져오거나 설정합니다.
Public 속성정적 멤버WindowHeight콘솔 창 영역의 높이를 가져오거나 설정합니다.
Public 속성정적 멤버WindowLeft화면 버퍼에 상대적인 콘솔 창 영역의 맨 왼쪽 위치를 가져오거나 설정합니다.
Public 속성정적 멤버WindowTop화면 버퍼에 상대적인 콘솔 창 영역의 위쪽 위치를 가져오거나 설정합니다.
Public 속성정적 멤버WindowWidth콘솔 창의 컨트롤의 너비를 가져오거나 설정합니다.
위쪽

  이름설명
Public 메서드정적 멤버Beep()콘솔 스피커를 통해 경고음을 재생합니다.
Public 메서드정적 멤버Beep(Int32, Int32)지정한 시간 동안 지정한 주파수로 콘솔 스피커를 통해 경고음을 재생합니다.
Public 메서드정적 멤버Clear콘솔 버퍼와 해당 콘솔 창에서 표시 정보를 지웁니다.
Public 메서드정적 멤버MoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32)화면 버퍼의 지정한 소스 영역을 지정한 대상 영역에 복사합니다.
Public 메서드정적 멤버MoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor)화면 버퍼의 지정한 소스 영역을 지정한 대상 영역에 복사합니다.
Public 메서드정적 멤버OpenStandardError()표준 오류 스트림을 가져옵니다.
Public 메서드정적 멤버OpenStandardError(Int32)표준 오류 스트림을 가져와 지정한 버퍼 크기로 설정합니다.
Public 메서드정적 멤버OpenStandardInput()표준 입력 스트림을 가져옵니다.
Public 메서드정적 멤버OpenStandardInput(Int32)표준 입력 스트림을 가져와 지정한 버퍼 크기로 설정합니다.
Public 메서드정적 멤버OpenStandardOutput()표준 출력 스트림을 가져옵니다.
Public 메서드정적 멤버OpenStandardOutput(Int32)표준 출력 스트림을 가져와 지정한 버퍼 크기로 설정합니다.
Public 메서드정적 멤버Read표준 입력 스트림에서 다음 문자를 읽습니다.
Public 메서드정적 멤버ReadKey()다음 문자나 사용자가 누른 기능 키를 가져옵니다. 누른 키는 콘솔 창에 표시됩니다.
Public 메서드정적 멤버ReadKey(Boolean)다음 문자나 사용자가 누른 기능 키를 가져옵니다. 누른 키는 선택적으로 콘솔 창에 표시됩니다.
Public 메서드정적 멤버XNA Framework에서 지원ReadLine표준 입력 스트림에서 다음 줄의 문자를 읽습니다.
Public 메서드정적 멤버ResetColor콘솔의 전경색과 배경색을 해당 기본값으로 설정합니다.
Public 메서드정적 멤버SetBufferSize화면 버퍼의 높이와 너비를 지정한 값으로 설정합니다.
Public 메서드정적 멤버SetCursorPosition커서의 위치를 설정합니다.
Public 메서드정적 멤버XNA Framework에서 지원SetError Error 속성을 지정한 TextWriter 개체로 설정합니다.
Public 메서드정적 멤버XNA Framework에서 지원SetIn In 속성을 지정한 TextReader 개체로 설정합니다.
Public 메서드정적 멤버XNA Framework에서 지원SetOut Out 속성을 지정한 TextWriter 개체로 설정합니다.
Public 메서드정적 멤버SetWindowPosition화면 버퍼에 상대적인 콘솔 창의 위치를 설정합니다.
Public 메서드정적 멤버SetWindowSize콘솔 창의 높이와 너비를 지정한 값으로 설정합니다.
Public 메서드정적 멤버Write(Boolean)지정한 부울 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원Write(Char)지정한 유니코드 문자 값을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원Write(Char[])지정한 유니코드 문자의 배열을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버Write(Decimal)지정한 Decimal 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버Write(Double)지정한 배정밀도 부동 소수점 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원Write(Int32)지정한 부호 있는 32비트 정수 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버Write(Int64)지정한 부호 있는 64비트 정수 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원Write(Object)지정한 개체의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버Write(Single)지정한 단정밀도 부동 소수점 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원Write(String)지정한 문자열 값을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버Write(UInt32)지정한 부호 없는 32비트 정수 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버Write(UInt64)지정한 부호 없는 64비트 정수 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원Write(String, Object)지정한 형식 정보를 사용하여 지정한 개체의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원Write(String, Object[])지정한 형식 정보를 사용하여 지정한 개체 배열의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원Write(Char[], Int32, Int32)지정한 유니코드 문자의 하위 배열을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원Write(String, Object, Object)지정한 형식 정보를 사용하여 지정한 개체의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원Write(String, Object, Object, Object)지정한 형식 정보를 사용하여 지정한 개체의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버Write(String, Object, Object, Object, Object)지정한 형식 정보를 사용하여 지정한 개체 및 가변 길이 매개 변수 목록의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원WriteLine()현재 줄 종결자를 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버WriteLine(Boolean)뒤에 현재 줄 종결자가 오는, 지정한 부울 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원WriteLine(Char)뒤에 현재 줄 종결자가 오는, 지정한 유니코드 문자 값을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원WriteLine(Char[])뒤에 현재 줄 종결자가 오는, 지정한 유니코드 문자의 배열을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버WriteLine(Decimal)뒤에 현재 줄 종결자가 오는, 지정한 Decimal 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버WriteLine(Double)뒤에 현재 줄 종결자가 오는, 지정한 배정밀도 부동 소수점 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원WriteLine(Int32)뒤에 현재 줄 종결자가 오는, 부호 있는 32비트 정수 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버WriteLine(Int64)뒤에 현재 줄 종결자가 오는, 부호 있는 64비트 정수 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원WriteLine(Object)뒤에 현재 줄 종결자가 오는, 지정한 개체의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버WriteLine(Single)뒤에 현재 줄 종결자가 오는, 지정한 단정밀도 부동 소수점 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원WriteLine(String)뒤에 현재 줄 종결자가 오는, 지정한 문자열 값을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버WriteLine(UInt32)뒤에 현재 줄 종결자가 오는, 부호 없는 32비트 정수 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버WriteLine(UInt64)뒤에 현재 줄 종결자가 오는, 부호 없는 64비트 정수 값의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원WriteLine(String, Object)지정한 형식 정보를 사용하여 뒤에 현재 줄 종결자가 오는, 지정한 개체의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원WriteLine(String, Object[])지정한 형식 정보를 사용하여 뒤에 현재 줄 종결자가 오는, 지정한 개체 배열의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버WriteLine(Char[], Int32, Int32)뒤에 현재 줄 종결자가 오는, 지정한 유니코드 문자의 하위 배열을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원WriteLine(String, Object, Object)지정한 형식 정보를 사용하여 뒤에 현재 줄 종결자가 오는, 지정한 개체의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버XNA Framework에서 지원WriteLine(String, Object, Object, Object)지정한 형식 정보를 사용하여 뒤에 현재 줄 종결자가 오는, 지정한 개체의 텍스트 표현을 표준 출력 스트림에 씁니다.
Public 메서드정적 멤버WriteLine(String, Object, Object, Object, Object)지정한 형식 정보를 사용하여 뒤에 현재 줄 종결자가 오는, 지정한 개체 및 가변 길이 매개 변수 목록의 텍스트 표현을 표준 출력 스트림에 씁니다.
위쪽

  이름설명
Public 이벤트정적 멤버CancelKeyPress Control 보조키(Ctrl)가 지정되었고 ConsoleKey.C 콘솔 키나 Break 키 중 하나를 보조키와 동시에 눌러(Ctrl+C 또는 Ctrl+Break) 이벤트가 발생한 경우입니다.
위쪽

콘솔은 사용자가 컴퓨터 키보드를 통해 텍스트를 입력하거나 컴퓨터 터미널에서 텍스트 출력을 읽어 운영 체제 또는 텍스트 기반 콘솔 응용 프로그램과 상호 작용하는 운영 체제 창입니다. 예를 들어, Windows에서는 콘솔을 명령 프롬프트 창이라고 하며 MS-DOS 명령을 받습니다. Console 클래스는 응용 프로그램에 콘솔에서 문자를 읽고, 콘솔에 문자를 쓰는 기본 기능을 제공합니다.

Console 클래스를 통해 개발하는 방법에 대한 정보는 다음 섹션을 참고하세요.

콘솔 I/O 스트림

콘솔 응용 프로그램을 시작할 때, 운영 체제가 자동으로 콘솔과 세 개의 I/O 스트림을 연관시킵니다 : 표준 입력 스트림, 표준 출력 스트림, 표준 오류 출력 스트림. 응용 프로그램은 표준 입력 스트림에서 사용자 입력을 읽고 표준 출력 스트림에 정상 데이터를 쓰며 표준 오류 출력 스트림에 오류 데이터를 쓸 수 있습니다. 이러한 스트림은 해당 응용 프로그램에 Console.In, Console.OutConsole.Error 속성의 값으로 표시됩니다.

In 속성의 기본값은 System.IO.TextReader 개체이며 OutError 속성의 기본값은 System.IO.TextWriter 개체입니다. 그러나 파일을 나타내는 스트림과 같이 콘솔을 나타내지 않는 스트림에도 이러한 속성을 설정할 수 있습니다. 표준 입력, 표준 출력 또는 표준 오류 스트림을 리디렉션하려면 각각 Console.SetIn, Console.SetOut 또는 Console.SetError 메서드를 호출합니다. 이러한 스트림을 사용하는 I/O 작업은 동기화되므로 스트림에서 여러 스레드를 읽거나 쓸 수 있습니다.

참고참고

서버 응용 프로그램과 같은 무인 응용 프로그램에서는 Console 클래스를 사용하여 출력을 표시하지 말아야 합니다. Console.Write Console.WriteLine 같은 메서드를 호출해도 GUI 응용프로그램에서 아무 효과가 없습니다.

내부 스트림이 콘솔에 디렉션될 때 정상적으로 작동하는 Console 클래스 멤버라도 해당 스트림이 파일과 같은 대상에 리디렉션되는 경우 예외를 throw할 수 있습니다. 표준 스트림을 리디렉션하는 경우 응용 프로그램에서 System.IO.IOException 확장명을 받도록 프로그래밍해야 합니다. System.IO.IOException 예외를 출력하는 계산을 수행하기 전에 리디렉션 되는 표준 스트림을 결정하기 위해 IsOutputRedirected, IsInputRedirected, IsErrorRedirected 속성을 사용할 수 있습니다.

경우에 따라 In, OutError 속성으로 표시되는 스트림 개체의 멤버를 명시적으로 호출하는 것이 더 좋습니다. 예를 들어 기본적으로 Console.ReadLine 메서드는 표준 입력 스트림에서 입력을 읽습니다. 마찬가지로 Console.WriteLine 메서드는 표준 출력 스트림에 데이터를 쓰고 기본 줄 종결 문자열을 덧붙입니다. 즉, 데이터에 캐리지 리턴과 줄 바꿈("\r\n")이 추가됩니다. 그러나 Console 클래스는 표준 오류 출력 스트림에 데이터를 쓰는 해당 메서드나 이러한 스트림에 쓰는 데이터의 줄 종결 문자열을 변경하는 속성을 제공하지 않습니다.

이 문제는 Out 또는 Error 속성의 TextWriter.NewLine 속성을 다른 줄 종결 문자열로 설정하여 해결할 수 있습니다. 예를 들어, 다음 C# 문 에서는 표준 오류 출력 스트림에 대한 줄 종결 문자열을 두 개의 캐리지 리턴과 줄 바꿈 시퀀스로 설정합니다.

Console.Error.NewLine = "\r\n\r\n";

그 다음 C# 문과 같이 오류 출력 스트림 개체의 WriteLine 메서드를 명시적으로 호출할 수 있습니다.

Console.Error.WriteLine();

화면 버퍼 및 콘솔 창

콘솔에서 서로 밀접한 관련이 있는 두 기능이 화면 버퍼와 콘솔 창입니다. 실제로는 콘솔이 소유하는 스트림에서 텍스트를 실제로 읽거나 쓰지만 사용자에게는 콘솔 소유 영역인 화면 버퍼에서 읽거나 쓰는 것처럼 보입니다. 화면 버퍼는 콘솔의 한 특성으로서, 각 모눈 교차 부분 또는 문자 셀에 문자를 포함할 수 있는 행과 열의 사각형 모눈으로 구성됩니다. 각 문자에는 고유한 전경색이 있고, 각 문자 셀에는 고유한 배경색이 있습니다.

화면 버퍼는 콘솔 창이라는 사각형 영역에 표시됩니다. 콘솔 창은 콘솔의 다른 특성으로, 운영 체제 창인 콘솔 자체가 아닙니다. 콘솔 창은 행과 열로 구성되며 크기가 화면 버퍼와 같거나 더 작기 때문에 창을 이동하면 내부 화면 버퍼의 다른 영역을 볼 수 있습니다. 화면 버퍼가 콘솔 창보다 큰 경우 콘솔에는 자동으로 스크롤 막대가 표시되어 화면 버퍼 영역을 볼 수 있도록 콘솔 창의 위치가 변경될 수 있습니다.

커서는 현재 텍스트를 읽거나 쓰는 화면 버퍼 위치를 나타냅니다. 커서는 숨기거나 표시할 수 있으며 높이도 변경할 수 있습니다. 커서를 표시하도록 설정한 경우에는 커서가 항상 보이도록 콘솔 창 위치가 자동으로 이동됩니다.

화면 버퍼에서 문자 셀 좌표의 원점은 왼쪽 위 모퉁이이며 커서 및 콘솔 창의 위치는 해당 원점에 상대적입니다. 0을 기준으로 하는 인덱스를 사용하여 위치를 지정합니다. 즉, 가장 위의 행은 행 0으로, 가장 왼쪽에 있는 열은 열 0으로 지정합니다. 행 및 열 인덱스에 대한 최대 값은 Int16.MaxValue입니다.

유니코드에서 콘솔에 대한 지원.

일반적으로, 콘솔은 입력을 읽고 시스템 로캘에서 기본적으로 정의하는 현재 콘솔 코드 페이지를 사용하여 출력을 씁니다. 코드 페이지는 사용할 수 있는 유니코드 문자의 하위 집합을 처리할 수 있습니다. 그래서 만일 특정 코드 페이지에 매핑되지 않는 문자를 표시하려고 하면, 콘솔은 모든 캐릭터를 표시하거나 그들을 정확하게 나타낼 수 없습니다. 다음 예제에서는 이 문제를 보여 줍니다. U + 044F U + 0410의 키릴 자모 문자를 콘솔에 표시 하려고 합니다. 콘솔 코드 페이지 437을 사용하는 시스템에서 이 예제를 실행하며, 키릴 문자가 코드 페이지 437에서 문자에 매핑되지 않으므로 각 문자는 물음표(?)로 바뀝니다.


using System;

public class Example
{
   public static void Main()
   {
      // Create a Char array for the modern Cyrillic alphabet, 
      // from U+0410 to U+044F.
      int nChars = 0x044F - 0x0410 + 1;
      char[] chars = new char[nChars];
      ushort codePoint = 0x0410;
      for (int ctr = 0; ctr < chars.Length; ctr++) {
        chars[ctr] = Convert.ToChar(codePoint);
        codePoint++;
      }   

      Console.WriteLine("Current code page: {0}\n", 
                        Console.OutputEncoding.CodePage);
      // Display the characters.
      foreach (var ch in chars) {
         Console.Write("{0}  ", ch);
         if (Console.CursorLeft >= 70) 
            Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    Current code page: 437
//    
//    ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?
//    ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?
//    ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?


코드 페이지를 지원하는 것에 더하여, Console 클래스는 UTF8Encoding 클래스와 함께 UTF-8 인코딩을 지원합니다. .NET Framework 4.5 부터는, Console 클래스 UnicodeEncoding 클래스와 함께 UTF-16 인코딩 역시 지원합니다. 콘솔에서 유니코드 문자를 표시하려면, UTF8Encoding 또는 UnicodeEncoding중 하나에 OutputEncoding 요소를 설정합니다.

유니코드 문자에 대한 지원은 특정한 유니코드 문자를 인식하기 위해 인코더를 요구하고, 문자를 렌더링하는데 필요한 글립을 가지는 폰트 역시 요구합니다. 콘솔에 유니코드 문자를 성공적으로 표시하려면, 콘솔 폰트는 Consolas 또는 Lucida Console 같은 트루타입 폰트또는 논-래스터로 설정되어야만 합니다. 다음 예제에서는 래스터 폰트에서 Lucida Console까지 폰트를 프로그래밍 방식으로 변경할 수 있는 방법을 보여줍니다.


using System;
using System.Runtime.InteropServices;

public class Example
{
   [DllImport("kernel32.dll", SetLastError = true)]
   static extern IntPtr GetStdHandle(int nStdHandle);

   [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
   static extern bool GetCurrentConsoleFontEx(
          IntPtr consoleOutput, 
          bool maximumWindow,
          ref CONSOLE_FONT_INFO_EX lpConsoleCurrentFontEx);

   [DllImport("kernel32.dll", SetLastError = true)]
   static extern bool SetCurrentConsoleFontEx(
          IntPtr consoleOutput, 
          bool maximumWindow,
          CONSOLE_FONT_INFO_EX consoleCurrentFontEx);

   private const int STD_OUTPUT_HANDLE = -11;
   private const int TMPF_TRUETYPE = 4;
   private const int LF_FACESIZE = 32;
   private static IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);

   public static unsafe void Main()
   {
      string fontName = "Lucida Console";
      IntPtr hnd = GetStdHandle(STD_OUTPUT_HANDLE);
      if (hnd != INVALID_HANDLE_VALUE) {
         CONSOLE_FONT_INFO_EX info = new CONSOLE_FONT_INFO_EX();
         info.cbSize = (uint) Marshal.SizeOf(info);
         bool tt = false;
         // First determine whether there's already a TrueType font.
         if (GetCurrentConsoleFontEx(hnd, false, ref info)) {
            tt = (info.FontFamily & TMPF_TRUETYPE) == TMPF_TRUETYPE;
            if (tt) {
               Console.WriteLine("The console already is using a TrueType font.");
               return;
            }
            // Set console font to Lucida Console.
            CONSOLE_FONT_INFO_EX newInfo = new CONSOLE_FONT_INFO_EX();
            newInfo.cbSize = (uint) Marshal.SizeOf(newInfo);          
            newInfo.FontFamily = TMPF_TRUETYPE;
            IntPtr ptr = new IntPtr(newInfo.FaceName);
            Marshal.Copy(fontName.ToCharArray(), 0, ptr, fontName.Length);
            // Get some settings from current font.
            newInfo.dwFontSize = new COORD(info.dwFontSize.X, info.dwFontSize.Y);
            newInfo.FontWeight = info.FontWeight;
            SetCurrentConsoleFontEx(hnd, false, newInfo);
         }
      }    
    }

   [StructLayout(LayoutKind.Sequential)]
   internal struct COORD
   {
      internal short X;
      internal short Y;

      internal COORD(short x, short y)
      {
         X = x;
         Y = y;
      }
   }

   [StructLayout(LayoutKind.Sequential)]
   internal unsafe struct CONSOLE_FONT_INFO_EX 
   {
      internal uint cbSize;
      internal uint nFont;
      internal COORD dwFontSize;
      internal int FontFamily;
      internal int FontWeight;
      internal fixed char FaceName[LF_FACESIZE];
   } 
}


그러나 트루타입폰트는 오직 글립의 하위 집합만 표시할 수 있습니다. 예를 들어 Lucida Console 폰트는 U+0021부터 U+FB02까지 약 64000의 가능한 문자들 중 오직 643만 표시됩니다? 특정 폰트 지원을 보여주기 위해, 제어판에서 폰트 애플릿을 열고, 문자 찾기 을 선택하고, 문자표 창의 폰트 목록에서 실행하길 원하는 문자셋 폰트를 선택합니다.

Windows는 특정 글꼴에서 사용할 수 없는 문자를 표시 하려면 글꼴 연결을 사용 합니다. 추가적인 문자 집합을 표시하기 위한 폰트 링크에 대한 정보는, 세계화 단계별 연습: 글꼴을 참고하세요. 연결 된 글꼴은 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink 레지스트리 하위 키에서 정의됩니다. 하위 키와 함께 관련된 각 항목은 기본 폰트의 이름에 일치하고, 이것의 값은 콘트 파일들에 정의된 문자열 배열이고 기본 폰트에 링크된 폰트들입니다. 각 배열의 멤버는 링크된 폰트를 정의하고 글꼴 파일 이름,글꼴 이름 형태를 구성합니다. 다음 예제에서는 한자 간체 문자를 표시하는 simsun.ttc로 명명된 폰트 파일에서 찾을 수 있는 Simsun이라는 링크된 폰트를 프로그래밍 방식으로 정의할 수 있는 방법을 보여줍니다.


using Microsoft.Win32;
using System;

public class Example
{
   public static void Main()
   {
      string valueName = "Lucida Console";
      string newFont = "simsun.ttc,SimSun";
      string[] fonts = null;
      RegistryValueKind kind = 0; 
      bool toAdd;

      RegistryKey key = Registry.LocalMachine.OpenSubKey( 
                 @"Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink", 
                 true);
      if (key == null) {
         Console.WriteLine("Font linking is not enabled.");
      }
      else {
         // Determine if the font is a base font.
         string[] names = key.GetValueNames();
         if (Array.Exists(names, s => s.Equals(valueName, 
                                      StringComparison.OrdinalIgnoreCase))) {
            // Get the value's type.
            kind = key.GetValueKind(valueName);

            // Type should be RegistryValueKind.MultiString, but we can't be sure.
            switch (kind) {
               case RegistryValueKind.String:
                  fonts = new string[] { (string) key.GetValue(valueName) };
                  break;   
               case RegistryValueKind.MultiString:
                  fonts = (string[]) key.GetValue(valueName);
                  break;
               case RegistryValueKind.None:
                  // Do nothing.
                  fonts = new string[] { };
                  break;
            } 
            // Determine whether SimSun is a linked font.
            if (Array.FindIndex(fonts, s =>s.IndexOf("SimSun", 
                                       StringComparison.OrdinalIgnoreCase) >=0) >= 0) {
               Console.WriteLine("Font is already linked.");
               toAdd = false;
            }
            else {
               // Font is not a linked font.
               toAdd = true;
            }
         }
         else {
            // Font is not a base font.
            toAdd = true;
            fonts = new string[] { };
         }

         if (toAdd) {  
            Array.Resize(ref fonts, fonts.Length + 1);
            fonts[fonts.GetUpperBound(0)] = newFont;
            // Change REG_SZ to REG_MULTI_SZ.
            if (kind == RegistryValueKind.String)
               key.DeleteValue(valueName, false);

            key.SetValue(valueName, fonts, RegistryValueKind.MultiString);
            Console.WriteLine("SimSun added to the list of linked fonts.");
         }                     
      }

      if (key != null) key.Close();
   }
}


콘솔을 지원하는 유니코드는 다음과 같은 제한이 있습니다:

  • UTF-32 인코딩이 지원되지 않습니다. 유니코드 인코딩을 UTF-8과 UTF-16으로 표시되는 경우, 각각 UTF8EncodingUnicodeEncoding 클래스들로 나타납니다.

  • 양방향성 출력은 지원되지 않습니다.

  • 기본적인 다국어표 외부문자의 표시 (즉, 대리의 쌍의)는 연결된 글꼴 파일에 정의 된 경우에는 지원 되지 않습니다.

  • 복잡한 스크립트 문자표시는 지원 하지 않습니다.

  • 문자 순서 결합은 (즉, 구성 되는 문자의 기본 문자와 하나 이상의 결합 문자) 분리된 문자들로써 표시됩니다. 이 제한에 대해 작업하기 위해, 콘솔에 출력을 전송하기 전에 String.Normalize 메서드를 호출함으로써 표시 될 수 있도록 문자열을 표준화할 수 있습니다. 다음 예제에서는, 시퀀스 U+0061 U+0308의 결합을 포함하는 문자열은 출력 문자열이 정규화 되기 전에 두 문자들로써 그리고 String.Normalize 메서드가 호출된 후에 하나의 문자로써 콘솔에 표시됩니다.

    
    using System;
    using System.IO;
    
    public class Example
    {
       public static void Main()
       {
          char[] chars = { '\u0061', '\u0308' };
    
          string combining = new String(chars);
          Console.WriteLine(combining);
    
          combining = combining.Normalize();
          Console.WriteLine(combining);
       }
    }
    // The example displays the following output:
    //       a"
    //       ä
    
    
    

    참고 유니코드 문자를 특정 combining 해당 하는 미리 구성 된 폼에 대 한 표준 문자 시퀀스 경우에 정규화는 가능한 솔루션입니다.

  • 개인 사용 영역에서 코드 포인트에 대해 글꼴이 문자 모양을 제공하는 경우 그 문자모양은 표시될 것입니다. 그러나 개인 사용 영역에서 문자들이 응용 프로그램-특정이기 때문에 예상 되는 문자 모양일 수 없을지도 모릅니다.

다음 예제는 콘솔에 유니코드 문자의 범위를 표시하는 것입니다. 이 예제에서는 세 개의 명령줄 매개 변수를 허용합니다: 표시될 범위의 시작과 끝 그리고 현재 콘솔 인코딩(false) 또는 UTF-16으로 인코딩 (true)을 사용할지 말지에 대한 매개 변수들 입니다. 콘솔이 트루타입 글꼴을 사용하고 있음을 가정 합니다.


using System;
using System.IO;
using System.Globalization;
using System.Text;

public static class DisplayChars
{
   private static void Main(string[] args)
   {
      uint rangeStart = 0;
      uint rangeEnd = 0;
      bool setOutputEncodingToUnicode = true;
      // Get the current encoding so we can restore it.
      Encoding originalOutputEncoding = Console.OutputEncoding;

   	try
   	{
         switch(args.Length)
         {
            case 2:
               rangeStart = uint.Parse(args[0], NumberStyles.HexNumber);
               rangeEnd = uint.Parse(args[1], NumberStyles.HexNumber);
               setOutputEncodingToUnicode = true;
               break;
            case 3:
               if (! uint.TryParse(args[0], NumberStyles.HexNumber, null, out rangeStart))
                  throw new ArgumentException(String.Format("{0} is not a valid hexadecimal number.", args[0]));

               if (!uint.TryParse(args[1], NumberStyles.HexNumber, null, out rangeEnd))
                  throw new ArgumentException(String.Format("{0} is not a valid hexadecimal number.", args[1]));

               bool.TryParse(args[2], out setOutputEncodingToUnicode);
               break;
            default:
               Console.WriteLine("Usage: {0} <{1}> <{2}> [{3}]", 
                                 Environment.GetCommandLineArgs()[0], 
                                 "startingCodePointInHex", 
                                 "endingCodePointInHex", 
                                 "<setOutputEncodingToUnicode?{true|false, default:false}>");
               return;
         }

         if (setOutputEncodingToUnicode) {
            // This won't work before .NET Framework 4.5.
            try {
               // Set encoding using endianness of this system.
               // We're interested in displaying individual Char objects, so 
               // we don't want a Unicode BOM or exceptions to be thrown on
               // invalid Char values.
               Console.OutputEncoding = new UnicodeEncoding(! BitConverter.IsLittleEndian, false); 
               Console.WriteLine("\nOutput encoding set to UTF-16");
            }
            catch (IOException) {
               Console.OutputEncoding = new UTF8Encoding();
               Console.WriteLine("Output encoding set to UTF-8");
            }
         }
         else {
            Console.WriteLine("The console encoding is {0} (code page {1})", 
                              Console.OutputEncoding.EncodingName,
                              Console.OutputEncoding.CodePage);
         }
         DisplayRange(rangeStart, rangeEnd);
      }
      catch (ArgumentException ex) {
         Console.WriteLine(ex.Message);
      }
      finally {
         // Restore console environment.
         Console.OutputEncoding = originalOutputEncoding;
      }
   }

   public static void DisplayRange(uint start, uint end)
   {
      const uint upperRange = 0x10FFFF;
      const uint surrogateStart = 0xD800;
      const uint surrogateEnd = 0xDFFF;

      if (end <= start) {
         uint t = start;
         start = end;
         end = t;
      }

      // Check whether the start or end range is outside of last plane.
      if (start > upperRange)
         throw new ArgumentException(String.Format("0x{0:X5} is outside the upper range of Unicode code points (0x{1:X5})",
                                                   start, upperRange));                                   
      if (end > upperRange)
         throw new ArgumentException(String.Format("0x{0:X5} is outside the upper range of Unicode code points (0x{0:X5})",
                                                   end, upperRange));

      // Since we're using 21-bit code points, we can't use U+D800 to U+DFFF.
      if ((start < surrogateStart & end > surrogateStart) || (start >= surrogateStart & start <= surrogateEnd ))
         throw new ArgumentException(String.Format("0x{0:X5}-0x{1:X5} includes the surrogate pair range 0x{2:X5}-0x{3:X5}", 
                                                   start, end, surrogateStart, surrogateEnd));         
      uint last = RoundUpToMultipleOf(0x10, end);
      uint first = RoundDownToMultipleOf(0x10, start);

      uint rows = (last - first) / 0x10;

      for (uint r = 0; r < rows; ++r) {
         // Display the row header.
         Console.Write("{0:x5} ", first + 0x10 * r);

         for (uint c = 0; c < 0x10; ++c) {
            uint cur = (first + 0x10 * r + c);
            if (cur  < start) {
               Console.Write(" {0} ", Convert.ToChar(0x20));
            }
            else if (end < cur) {
               Console.Write(" {0} ", Convert.ToChar(0x20));
            }
            else {
               // the cast to int is safe, since we know that val <= upperRange.
               String chars = Char.ConvertFromUtf32( (int) cur);
               // Display a space for code points that are not valid characters.
               if (CharUnicodeInfo.GetUnicodeCategory(chars[0]) == 
                                               UnicodeCategory.OtherNotAssigned)
                  Console.Write(" {0} ", Convert.ToChar(0x20));
               // Display a space for code points in the private use area.
               else if (CharUnicodeInfo.GetUnicodeCategory(chars[0]) ==
                                              UnicodeCategory.PrivateUse)
                 Console.Write(" {0} ", Convert.ToChar(0x20));
               // Is surrogate pair a valid character?
               // Note that the console will interpret the high and low surrogate
               // as separate (and unrecognizable) characters.
               else if (chars.Length > 1 && CharUnicodeInfo.GetUnicodeCategory(chars, 0) == 
                                            UnicodeCategory.OtherNotAssigned)
                  Console.Write(" {0} ", Convert.ToChar(0x20));
               else
                  Console.Write(" {0} ", chars); 
            }

            switch (c) {
               case 3: case 11:
                  Console.Write("-");
                  break;
               case 7:
                  Console.Write("--");
                  break;
            }
         }

         Console.WriteLine();
         if (0 < r && r % 0x10 == 0)
            Console.WriteLine();
      }
   }

   private static uint RoundUpToMultipleOf(uint b, uint u)
   {
      return RoundDownToMultipleOf(b, u) + b;
   }

   private static uint RoundDownToMultipleOf(uint b, uint u)
   {
      return u - (u % b);
   }
}
// If the example is run with the command line
//       DisplayChars 0400 04FF true
// the example displays the Cyrillic character set as follows:
//       Output encoding set to UTF-16
//       00400  Ѐ  Ё  Ђ  Ѓ - Є  Ѕ  І  Ї -- Ј  Љ  Њ  Ћ - Ќ  Ѝ  Ў  Џ
//       00410  А  Б  В  Г - Д  Е  Ж  З -- И  Й  К  Л - М  Н  О  П
//       00420  Р  С  Т  У - Ф  Х  Ц  Ч -- Ш  Щ  Ъ  Ы - Ь  Э  Ю  Я
//       00430  а  б  в  г - д  е  ж  з -- и  й  к  л - м  н  о  п
//       00440  р  с  т  у - ф  х  ц  ч -- ш  щ  ъ  ы - ь  э  ю  я
//       00450  ѐ  ё  ђ  ѓ - є  ѕ  і  ї -- ј  љ  њ  ћ - ќ  ѝ  ў  џ
//       00460  Ѡ  ѡ  Ѣ  ѣ - Ѥ  ѥ  Ѧ  ѧ -- Ѩ  ѩ  Ѫ  ѫ - Ѭ  ѭ  Ѯ  ѯ
//       00470  Ѱ  ѱ  Ѳ  ѳ - Ѵ  ѵ  Ѷ  ѷ -- Ѹ  ѹ  Ѻ  ѻ - Ѽ  ѽ  Ѿ  ѿ
//       00480  Ҁ  ҁ  ҂  ҃ - ҄  ҅  ҆  ҇ -- ҈  ҉  Ҋ  ҋ - Ҍ  ҍ  Ҏ  ҏ
//       00490  Ґ  ґ  Ғ  ғ - Ҕ  ҕ  Җ  җ -- Ҙ  ҙ  Қ  қ - Ҝ  ҝ  Ҟ  ҟ
//       004a0  Ҡ  ҡ  Ң  ң - Ҥ  ҥ  Ҧ  ҧ -- Ҩ  ҩ  Ҫ  ҫ - Ҭ  ҭ  Ү  ү
//       004b0  Ұ  ұ  Ҳ  ҳ - Ҵ  ҵ  Ҷ  ҷ -- Ҹ  ҹ  Һ  һ - Ҽ  ҽ  Ҿ  ҿ
//       004c0  Ӏ  Ӂ  ӂ  Ӄ - ӄ  Ӆ  ӆ  Ӈ -- ӈ  Ӊ  ӊ  Ӌ - ӌ  Ӎ  ӎ  ӏ
//       004d0  Ӑ  ӑ  Ӓ  ӓ - Ӕ  ӕ  Ӗ  ӗ -- Ә  ә  Ӛ  ӛ - Ӝ  ӝ  Ӟ  ӟ
//       004e0  Ӡ  ӡ  Ӣ  ӣ - Ӥ  ӥ  Ӧ  ӧ -- Ө  ө  Ӫ  ӫ - Ӭ  ӭ  Ӯ  ӯ
//       004f0  Ӱ  ӱ  Ӳ  ӳ - Ӵ  ӵ  Ӷ  ӷ -- Ӹ  ӹ  Ӻ  ӻ - Ӽ  ӽ  Ӿ  ӿ


일반적인 작업

Console 클래스는 콘솔 입력 및 콘솔 출력을 위한 다음과 같은 메서드가 있습니다.

  • ReadKey 메서드의 오버로드들은 개별 문자를 읽습니다.

  • ReadLine 메서드는 입력의 전체 줄을 읽습니다.

  • Write 메서드 오버로드들은 값 형식의 인스턴스와 문자들의 배열 또는 형식이 있거나 없는 문자열에 대한 개체 집합을 변환하고 콘솔에 그 문자열을 입력합니다.

  • WriteLine 메서드 오버 로드들의 병렬 집합은 Write 오버로드들과 같은 문자열을 출력할 뿐만 아니라 선 종결 문자열을 추가합니다.

Console 클래스는 다음 작업을 수행 하는 속성들과 메서드들을 포함합니다:

  • 화면 버퍼의 크기를 가져오거나 설정 합니다. BufferHeight BufferWidth 속성들은 버퍼의 높이 너비를 가져오고 설정하며 각각 SetBufferSize 메서드는 단일 메서드 호출에서 버퍼 크기를 설정할 수 있게합니다.

  • 콘솔 창의 크기를 가져오거나 설정 합니다. WindowHeight WindowWidth 속성들은 버퍼의 높이 너비를 가져오고 설정하며 각각 SetWindowSize 메서드는 단일 메서드 호출에서 버퍼 크기를 설정할 수 있게합니다.

  • 커서의 크기를 가져오거나 설정 합니다. CursorSize 속성은 문자 셀에서 커서의 높이를 지정 합니다.

  • 화면 버퍼에 상대적인 콘솔 창의 위치를 가져오거나 설정합니다. WindowTop WindowLeft 속성들은 콘솔 창에 표시되는 화면 버퍼의 맨 왼쪽 열과 맨 위 행을 가져오거나 설정하고, SetWindowPosition 메서드는 단일 메서드 호출에서 이 값을 설정할 수 있게 합니다.

  • CursorLeft CursorTop 요소를 가져오거나 설정함으로써 커서의 위치를 설정하거나 가져오고, 또는 SetCursorPosition 메서드를 호출함으로써 커서의 위치 설정합니다.

  • 시스템 버퍼에서 MoveBufferArea 또는 Clear 메서드.를 호출함으로써 데이터를 삭제하거나 수정합니다.

  • ForegroundColor BackgroundColor 요소들을 사용함으로써 전경색과 배경색을 얻거나 설정하고, ResetColor 메서드를 호출함으로써 이들 기본 색상으로 전경색과 배경색을 다시 설정합니다.

  • Beep 메서드를 호출함으로써 콘솔 스피커를 통해 경고음을 재생합니다.

다음 예제에서는 데이터를 읽고 쓰고, 표준 입력 및 출력 스트림에 쓰는 방법을 보여줍니다. 이러한 스트림은 SetInSetOut 메서드를 사용하여 리디렉션될 수 있습니다.


using System;

public class Example {
    public static void Main() 
    {
        Console.Write("Hello ");
        Console.WriteLine("World!");
        Console.Write("Enter your name: ");
        String name = Console.ReadLine();
        Console.Write("Good day, ");
        Console.Write(name);
        Console.WriteLine("!");
    }
}
// The example displays output similar to the following:
//       Hello World!
//       Enter your name: James
//       Good day, James!


.NET Framework

4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

Windows Phone 앱용 .NET

Windows Phone 8, Silverlight 8.1에서 지원

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

이 형식은 스레드로부터 안전합니다.

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft