다음을 통해 공유


파일 및 스트림 입출력

파일 및 스트림 I/O(입력/출력)는 스토리지 매체 간에 데이터를 전송하는 것을 의미합니다. .NET System.IO 에서 네임스페이스에는 데이터 스트림 및 파일에 대해 동기적으로나 비동기적으로 읽기 및 쓰기를 가능하게 하는 형식이 포함되어 있습니다. 이러한 네임스페이스에는 파일에서 압축 및 압축 해제를 수행하는 형식과 파이프 및 직렬 포트를 통한 통신을 가능하게 하는 형식도 포함됩니다.

파일은 영구 스토리지가 있는 바이트의 순서가 지정되고 명명된 컬렉션입니다. 파일을 사용하는 경우 디렉터리 경로, 디스크 스토리지, 파일 및 디렉터리 이름을 사용합니다. 반면 스트림은 백업 저장소에서 읽고 쓰는 데 사용할 수 있는 바이트 시퀀스로, 여러 스토리지 매체(예: 디스크 또는 메모리) 중 하나일 수 있습니다. 디스크 이외의 여러 백업 저장소가 있는 것처럼 네트워크, 메모리 및 파이프 스트림과 같은 파일 스트림 이외의 여러 종류의 스트림이 있습니다.

파일 및 디렉터리

네임스페이스의 형식을 System.IO 사용하여 파일 및 디렉터리와 상호 작용할 수 있습니다. 예를 들어 파일 및 디렉터리에 대한 속성을 가져와서 설정하고 검색 조건에 따라 파일 및 디렉터리의 컬렉션을 검색할 수 있습니다.

경로 명명 규칙 및 .NET Core 1.1 이상 및 .NET Framework 4.6.2 이상에서 지원되는 DOS 디바이스 구문을 포함하여 Windows 시스템의 파일 경로를 표현하는 방법은 Windows 시스템의 파일 경로 형식을 참조하세요.

일반적으로 사용되는 몇 가지 파일 및 디렉터리 클래스는 다음과 같습니다.

  • File - 파일을 만들고, 복사하고, 삭제하고, 이동하고, 여는 정적 메서드를 제공하며 개체를 FileStream 만드는 데 도움이 됩니다.

  • FileInfo - 파일 만들기, 복사, 삭제, 이동 및 열기를 위한 인스턴스 메서드를 제공하고 개체를 FileStream 만드는 데 도움이 됩니다.

  • Directory - 디렉터리 및 하위 디렉터리를 통해 생성, 이동 및 열거를 위한 정적 메서드를 제공합니다.

  • DirectoryInfo - 디렉터리 및 하위 디렉터리를 통해 만들고, 이동하고, 열거하는 인스턴스 메서드를 제공합니다.

  • Path - 플랫폼 간 방식으로 디렉터리 문자열을 처리하기 위한 메서드 및 속성을 제공합니다.

파일 시스템 메서드를 호출할 때 항상 강력한 예외 처리를 제공해야 합니다. 자세한 내용은 I/O 오류 처리를 참조하세요.

Visual Basic 사용자는 이러한 클래스를 사용하는 것 외에도 파일 I/O에 대해 클래스에서 Microsoft.VisualBasic.FileIO.FileSystem 제공하는 메서드와 속성을 사용할 수 있습니다.

방법 : 디렉터리 복사, 방법: 디렉터리 목록 만들기방법: 디렉터리 및 파일 열거를 참조하세요.

스트림

추상 기본 클래스 Stream 는 바이트 읽기 및 쓰기를 지원합니다. 스트림을 나타내는 모든 클래스는 Stream 클래스로부터 상속받습니다. 클래스와 파생 클래스는 Stream 데이터 원본 및 리포지토리에 대한 공통 보기를 제공하고 프로그래머를 운영 체제 및 기본 디바이스의 특정 세부 정보로부터 격리합니다.

스트림에는 다음 세 가지 기본 작업이 포함됩니다.

  • 읽기 - 스트림에서 바이트 배열과 같은 데이터 구조로 데이터 전송

  • 쓰기 - 데이터 원본에서 스트림으로 데이터 전송

  • 검색 - 스트림 내에서 현재 위치 쿼리 및 수정

기본 데이터 원본 또는 리포지토리에 따라 스트림은 이러한 기능 중 일부만 지원할 수 있습니다. 예를 들어 클래스는 PipeStream 검색을 지원하지 않습니다. 스트림의 , CanReadCanWrite 속성은 CanSeek스트림이 지원하는 작업을 지정합니다.

다음은 일반적으로 사용되는 몇 가지 스트림 클래스입니다.

  • FileStream – 파일 읽기 및 쓰기용입니다.

  • IsolatedStorageFileStream – 격리된 스토리지의 파일을 읽고 쓰기 위한 것입니다.

  • MemoryStream – 메모리를 백업 저장소로 읽고 쓰기 위한 것입니다.

  • BufferedStream – 읽기 및 쓰기 작업의 성능을 향상하기 위한 것입니다.

  • NetworkStream – 네트워크 소켓을 통해 읽고 쓰는 데 사용됩니다.

  • PipeStream – 익명 및 명명된 파이프를 통해 읽고 쓰는 데 사용합니다.

  • CryptoStream – 암호화 변환에 데이터 스트림을 연결하는 데 사용합니다.

스트림을 비동기적으로 사용하는 예제는 비동기 파일 I/O를 참조하세요.

독자 및 작성자

또한 네임스페이 System.IO 스는 스트림에서 인코딩된 문자를 읽고 스트림에 쓰기 위한 형식을 제공합니다. 일반적으로 스트림은 바이트 입력 및 출력을 위해 설계되었습니다. 판독기 및 기록기 형식은 스트림이 작업을 완료할 수 있도록 인코딩된 문자의 바이트 변환을 처리합니다. 각 판독기 및 기록기 클래스는 클래스의 BaseStream 속성을 통해 검색할 수 있는 스트림과 연결됩니다.

다음은 일반적으로 사용되는 몇 가지 판독기 및 작성기 클래스입니다.

  • BinaryReaderBinaryWriter – 기본 데이터 형식을 이진 값으로 읽고 쓰는 데 사용됩니다.

  • StreamReaderStreamWriter – 인코딩 값을 사용하여 문자를 바이트 단위로 변환하여 문자를 읽고 쓰는 경우

  • StringReaderStringWriter – 문자열에서 문자를 읽고 쓰는 데 사용됩니다.

  • TextReaderTextWriter – 문자와 문자열을 읽고 쓰는 다른 판독기 및 작성기에 대한 추상 기본 클래스로 사용되지만 이진 데이터는 사용하지 않습니다.

방법: 파일에서 텍스트 읽기, 방법: 파일에 텍스트 쓰기, 방법: 문자열에서 문자 읽기방법: 문자열에 문자 쓰기

비동기 I/O 작업

많은 양의 데이터를 읽거나 쓰는 것은 리소스를 많이 사용할 수 있습니다. 애플리케이션이 사용자에게 계속 응답해야 하는 경우 이러한 작업을 비동기적으로 수행해야 합니다. 동기 I/O 작업을 사용하면 리소스 집약적 작업이 완료될 때까지 UI 스레드가 차단됩니다. Windows 8.x 스토어 앱을 개발할 때 비동기 I/O 작업을 사용하여 앱 작동이 중지되었다는 인상을 표시하지 않도록 합니다.

비동기 멤버는 이름에 Async이 포함되어 있으며, CopyToAsync, FlushAsync, ReadAsync, 및 WriteAsync 메서드가 그 예입니다. asyncawait 키워드와 함께 이러한 메서드를 사용합니다.

자세한 내용은 비동기 파일 I/O를 참조하세요.

압축

압축은 스토리지에 대한 파일의 크기를 줄이는 프로세스를 나타냅니다. 압축 해제는 압축된 파일의 콘텐츠를 추출하여 사용 가능한 형식으로 만드는 프로세스입니다. 네임스페이스에는 System.IO.Compression 파일 및 스트림을 압축 및 압축 해제하기 위한 형식이 포함되어 있습니다.

다음 클래스는 파일 및 스트림을 압축 및 압축 해제할 때 자주 사용됩니다.

  • ZipArchive – zip 보관 파일에서 항목을 만들고 검색하는 데 사용할 수 있습니다.

  • ZipArchiveEntry – 압축된 파일을 나타내는 데 사용할 수 있습니다.

  • ZipFile – 압축된 패키지를 만들고, 추출하고, 여는 데 사용할 수 있습니다.

  • ZipFileExtensions – 압축된 패키지에서 항목을 만들고 추출하는 데 사용할 수 있습니다.

  • DeflateStream – Deflate 알고리즘을 사용하여 스트림을 압축 및 압축 해제합니다.

  • GZipStream – gzip 데이터 형식으로 스트림 압축 및 압축을 해제하는 경우

방법: 파일 압축 및 추출을 참조하세요.

격리된 스토리지

격리된 스토리지는 코드를 저장된 데이터와 연결하는 표준화된 방법을 정의하여 격리 및 안전을 제공하는 데이터 스토리지 메커니즘입니다. 스토리지는 사용자, 어셈블리 및(선택 사항) 도메인에 의해 격리된 가상 파일 시스템을 제공합니다. 격리된 스토리지는 애플리케이션에 사용자 파일에 액세스할 수 있는 권한이 없는 경우에 특히 유용합니다. 컴퓨터의 보안 정책에 의해 제어되는 방식으로 애플리케이션에 대한 설정 또는 파일을 저장할 수 있습니다.

Windows 8.x 스토어 앱에는 격리된 스토리지를 사용할 수 없습니다. 대신 네임스페이스에서 애플리케이션 데이터 클래스를 Windows.Storage 사용합니다. 자세한 내용은 애플리케이션 데이터를 참조하세요.

격리된 스토리지를 구현할 때 자주 사용되는 클래스는 다음과 같습니다.

  • IsolatedStorage – 격리된 스토리지 구현에 대한 기본 클래스를 제공합니다.

  • IsolatedStorageFile – 파일 및 디렉터리를 포함하는 격리된 스토리지 영역을 제공합니다.

  • IsolatedStorageFileStream - 격리된 스토리지 내의 파일을 노출합니다.

격리된 스토리지를 참조하세요.

Windows 스토어 앱의 I/O 작업

Windows 8.x 스토어 앱용 .NET에는 스트림에서 읽고 쓰기 위한 다양한 형식이 포함되어 있습니다. 그러나 이 집합에는 모든 .NET I/O 형식이 포함되지 않습니다.

Windows 8.x 스토어 앱에서 I/O 작업을 사용할 때 유의해야 할 몇 가지 중요한 차이점:

필요한 경우 .NET Framework 스트림과 Windows 런타임 스트림 간에 변환할 수 있습니다. 자세한 내용은 방법: .NET Framework 스트림과 Windows 런타임 스트림 간 변환 또는 WindowsRuntimeStreamExtensions.

Windows 8.x 스토어 앱의 I/O 작업에 대한 자세한 내용은 빠른 시작: 파일 읽기 및 쓰기를 참조하세요.

I/O 및 보안

네임스페이스에서 클래스를 System.IO 사용하는 경우 ACL(액세스 제어 목록)과 같은 운영 체제 보안 요구 사항을 따라 파일 및 디렉터리에 대한 액세스를 제어해야 합니다. 이 요구 사항은 모든 FileIOPermission 요구 사항에 추가됩니다. 프로그래밍 방식으로 ACL을 관리할 수 있습니다. 자세한 내용은 방법: 액세스 제어 목록 항목 추가 또는 제거를 참조하세요.

기본 보안 정책은 인터넷 또는 인트라넷 애플리케이션이 사용자 컴퓨터의 파일에 액세스하는 것을 방지합니다. 따라서 인터넷 또는 인트라넷을 통해 다운로드할 코드를 작성할 때 실제 파일에 대한 경로가 필요한 I/O 클래스를 사용하지 마세요. 대신 .NET 애플리케이션에 격리된 스토리지 를 사용합니다.

보안 검사는 스트림이 생성될 때만 수행됩니다. 따라서 스트림을 연 다음 신뢰도가 낮은 코드 또는 애플리케이션 도메인에 전달하지 마세요.

  • 일반적인 I/O 작업
    파일, 디렉터리 및 스트림과 연결된 I/O 작업 목록과 각 작업에 대한 관련 콘텐츠 및 예제에 대한 링크를 제공합니다.

  • 비동기 파일 I/O
    비동기 I/O의 성능 이점 및 기본 작업에 대해 설명합니다.

  • 격리된 스토리지
    코드를 저장된 데이터와 연결하는 표준화된 방법을 정의하여 격리 및 안전을 제공하는 데이터 스토리지 메커니즘에 대해 설명합니다.

  • 파이프
    .NET의 익명 및 명명된 파이프 작업에 대해 설명합니다.

  • Memory-Mapped 파일
    가상 메모리의 디스크에 있는 파일의 내용을 포함하는 메모리 매핑된 파일에 대해 설명합니다. 메모리 매핑된 파일을 사용하여 매우 큰 파일을 편집하고 프로세스 간 통신을 위한 공유 메모리를 만들 수 있습니다.