기본 파일 I/O
업데이트: 2007년 11월
추상 기본 클래스 Stream은 바이트 읽기 및 쓰기를 지원합니다. Stream은 비동기 지원을 통합합니다. 이 클래스의 기본 구현은 해당하는 비동기 메서드에 대해 동기식 읽기/쓰기를 정의하며 반대의 경우도 마찬가지입니다.
스트림을 나타내는 모든 클래스는 Stream 클래스에서 상속됩니다. Stream 클래스와 해당 파생 클래스는 데이터 소스와 리포지토리의 일반 뷰를 제공하는데, 이 때 프로그래머는 운영 체제 및 내부 장치의 세부 사항에서 격리됩니다.
스트림은 다음과 같은 기본 작업과 관계가 있습니다.
스트림을 읽을 수 있습니다. 읽기는 스트림의 데이터를 바이트 배열 같은 데이터 구조로 전송하는 것입니다.
스트림을 쓸 수 있습니다. 쓰기는 데이터 소스의 데이터를 스트림으로 전송하는 것입니다.
스트림은 검색을 지원할 수 있습니다. 검색은 스트림 내에서 현재 위치를 쿼리하고 수정하는 것입니다.
내부 데이터 소스 또는 리포지토리에 따라 스트림에서 이러한 기능 중 일부만 지원할 수도 있습니다. 예를 들면 NetworkStream은 검색을 지원하지 않습니다. Stream의 CanRead, CanWrite, CanSeek 속성 및 해당 파생 클래스에 따라 다양한 스트림에서 지원하는 작업이 결정됩니다.
공통적인 I/O 작업 목록은 공통적인 I/O 작업을 참조하십시오.
참고: |
---|
Visual Basic 사용자는 I/O에 대해 My.Computer.FileSystem 개체에서 제공하는 메서드와 속성을 사용하도록 선택할 수 있습니다. 자세한 내용은 My.Computer.FileSystem 개체를 참조하십시오. |
파일 I/O에 사용되는 클래스
Directory는 디렉터리와 하위 디렉터리를 만들고, 이동하고, 열거하는 정적 메서드를 제공합니다. DirectoryInfo 클래스는 인스턴스 메서드를 제공합니다.
DirectoryInfo는 디렉터리와 하위 디렉터리에서 만들기, 이동 및 열거를 위한 인스턴스 메서드를 제공합니다. Directory 클래스는 정적 메서드를 제공합니다.
DriveInfo는 드라이브에 대한 정보에 액세스하기 위한 인스턴스 메서드를 제공합니다.
File은 파일 만들기, 복사, 삭제, 이동 및 열기를 위한 정적 메서드를 제공하고 FileStream 만들기를 지원합니다. FileInfo 클래스는 인스턴스 메서드를 제공합니다.
FileInfo는 파일 만들기, 복사, 삭제, 이동 및 열기를 위한 인스턴스 메서드를 제공하고 FileStream 만들기를 지원합니다. File 클래스는 정적 메서드를 제공합니다.
FileStream은 Seek 메서드를 통해 파일에 대한 임의 액세스를 지원합니다. FileStream은 기본적으로 파일을 동기식으로 열지만 비동기 작업도 지원합니다. File은 정적 메서드를 포함하고 FileInfo는 인스턴스 메서드를 포함합니다.
FileSystemInfo는 FileInfo 및 DirectoryInfo의 추상 기본 클래스입니다.
Path는 플랫폼 간에 호환되는 방식으로 디렉터리 문자열을 처리하기 위한 메서드와 속성을 제공합니다.
DeflateStream은 Deflate 알고리즘을 사용하여 스트림을 압축하고 압축 해제하기 위한 메서드와 속성을 제공합니다.
GZipStream은 스트림을 압축하고 압축 해제하기 위한 메서드와 속성을 제공합니다. 기본적으로 이 클래스는 DeflateStream 클래스와 같은 알고리즘을 사용하지만 다른 압축 형식을 사용하도록 확장할 수 있습니다.
SerialPort는 직렬 포트 파일 리소스를 제어하기 위한 메서드와 속성을 제공합니다.
File, FileInfo, DriveInfo, Path, Directory 및 DirectoryInfo는 봉인된 클래스(Microsoft Visual Basic의 경우 NotInheritable 클래스) 입니다. 이러한 클래스의 새 인스턴스를 만들 수 있지만 파생 클래스를 포함할 수는 없습니다.
스트림에서 읽기 및 스트림에 쓰기에 사용되는 클래스
BinaryReader와 BinaryWriter는 인코딩된 문자열 및 기본 데이터 형식을 Streams에서 읽고 Streams에 씁니다.
StreamReader는 Encoding을 사용하여 Streams에서 문자를 읽어 문자와 바이트 간에 변환을 수행합니다. StreamReader에는 바이트 순서 표시와 같은 Encoding 특정 preamble의 존재 여부를 기반으로 하여 지정된 Stream에 대한 올바른 Encoding을 확인하는 생성자가 있습니다.
StreamWriter는 Encoding을 사용하여 Streams에 문자를 써서 문자를 바이트로 변환합니다.
StringReader는 Strings에서 문자를 읽습니다. StringReader를 사용하면 Strings를 동일한 API로 간주할 수 있으므로 출력은 String 또는 모든 인코딩의 Stream이 될 수 있습니다.
StringWriter는 Strings에 문자를 씁니다. StringWriter를 사용하면 Strings를 동일한 API로 간주할 수 있으므로 출력은 String 또는 모든 인코딩의 Stream이 될 수 있습니다.
TextReader는 StreamReader 및 StringReader의 추상 기본 클래스입니다. 추상 Stream 클래스의 구현은 바이트 입력 및 출력을 위해 디자인된 반면 TextReader 구현은 유니코드 문자 출력을 위해 디자인되었습니다.
TextWriter는 StreamWriter 및 StringWriter의 추상 기본 클래스입니다. 추상 Stream 클래스의 구현은 바이트 입력 및 출력을 위해 디자인된 반면 TextWriter 구현은 유니코드 문자 입력을 위해 디자인되었습니다.
공통적인 I/O 스트림 클래스
A BufferedStream은 버퍼링을 NetworkStream과 같은 다른 Stream에 추가하는 Stream입니다. (FileStream은 내부적으로 이미 버퍼링을 가지고 있으며 MemoryStream은 버퍼링을 필요로 하지 않습니다.) 읽기 및 쓰기 성능을 향상시키기 위해 BufferedStream을 특정 형식의 스트림으로 구성할 수 있습니다. 버퍼는 데이터를 캐시하는 데 사용되는 메모리의 바이트 블록이며 운영 체제 호출 수를 줄입니다.
A CryptoStream은 데이터 스트림을 암호화 변환에 연결합니다. CryptoStream은 Stream에서 파생되지만 System.IO 네임스페이스의 일부가 아닙니다. 그러나 System.Security.Cryptography 네임스페이스에 있습니다.
MemoryStream은 캡슐화된 데이터를 메모링서 직접 액세스할 수 있는 버퍼링되지 않은 스트림입니다. 이 스트림은 백업 저장소를 가지지 않고 임시 버퍼로 유용합니다.
NetworkStream은 네트워크 연결을 통해 Stream을 나타냅니다. NetworkStream은 Stream에서 파생되지만 System.IO 네임스페이스의 일부는 아닙니다. 그러나 System.Net.Sockets 네이스페이스에 있습니다.
I/O와 보안
System.IO 네임스페이스에서 클래스를 사용하는 경우 액세스가 허용되게 하려면 ACL(액세스 제어 목록) 같은 운영 체제 보안 요구 사항이 충족되어야 합니다. FileIOPermission 요구 사항에 이 요구 사항이 추가됩니다.
참고: |
---|
ACL은 프로그래밍 방식으로 관리할 수 있습니다. 자세한 내용은 방법: 액세스 제어 목록 항목 추가 또는 제거 및 ACL 기술 개요를 참조하십시오. |
주의: |
---|
인터넷과 인트라넷의 기본 보안 정책은 파일 액세스를 허용하지 않으므로 인터넷을 통해 다운로드되는 코드를 작성 중인 경우에는 보통의 격리되지 않은 저장소 I/O 클래스를 사용하지 않습니다. 대신 격리된 저장소를 사용합니다. |
주의: |
---|
파일이나 네트워크 스트림을 여는 경우 스트림이 구성되는 경우에만 보안 검사가 수행됩니다. 그러므로 이러한 스트림을 충분히 신뢰할 수 없는 코드 또는 응용 프로그램 도메인에 전달할 때 주의해야 합니다. |