파일 및 스트림 I/OFile and Stream I/O

파일 및 스트림 I/O(입/출력)는 스토리지 매체로 데이터를 전송하거나 스토리지 매체로부터 데이터를 전송 받습니다.File and stream I/O (input/output) refers to the transfer of data either to or from a storage medium. .NET Framework에서 System.IO 네임스페이스는 데이터 스트림과 파일에서 읽기 및 쓰기를 동기적 및 비동기적으로 사용하는 형식을 포함합니다.In the .NET Framework, the System.IO namespaces contain types that enable reading and writing, both synchronously and asynchronously, on data streams and files. 이러한 네임스페이스는 파일의 압축 및 압축 풀기 기능을 수행하는 형식 및 파이프 및 직렬 포트를 통한 통신을 가능하도록 하는 형식을 포함합니다.These namespaces also contain types that perform compression and decompression on files, and types that enable communication through pipes and serial ports.

파일은 정돈되고 이름이 지정된 컬렉션의 바이트이며, 이 컬렉션에는 영구 스토리지가 있습니다.A file is an ordered and named collection of bytes that has persistent storage. 사용자가 파일을 사용할 때, 디렉터리 경로, 디스크 스토리지 및 파일과 디렉터리 이름을 다룹니다.When you work with files, you work with directory paths, disk storage, and file and directory names. 반대로, 스트림은 여러 가지 스토리지 매체 중 하나인 백업 저장소(예를 들어, 디스크 또는 메모리)에서 읽고 쓸 수 있는 바이트 시퀀스입니다.In contrast, a stream is a sequence of bytes that you can use to read from and write to a backing store, which can be one of several storage mediums (for example, disks or memory). 디스크 외에 여러 백업 저장소가 존재하듯이, 파이프 스트림 외에 여러 종류의 스트림, 예를 들어 네트워크, 메모리, 파일 스트림도 존재합니다.Just as there are several backing stores other than disks, there are several kinds of streams other than file streams, such as network, memory, and pipe streams.

파일 및 디렉터리Files and directories

사용자는 이 형식들을 System.IO 네임스페이스에서 파일 및 디렉터리와 상호 작용하기 위해 사용할 수 있습니다.You can use the types in the System.IO namespace to interact with files and directories. 예를 들어, 파일 및 디렉터리에 대한 속성을 가져오고 설정할 수 있고, 검색 조건에 따라 파일 및 디렉터리의 컬렉션을 검색할 수 있습니다.For example, you can get and set properties for files and directories, and retrieve collections of files and directories based on search criteria.

.NET Core 1.1 및 .NET Framework 4.6.2 이상에서 지원되는 DOS 디바이스 구문을 비롯한 Windows 시스템에 대한 경로 명명 규칙 및 파일 경로를 표현하는 방법은 Windows 시스템의 파일 경로 형식을 참조하세요.For path naming conventions and the ways to express a file path for Windows systems, including with the DOS device syntax supported in .NET Core 1.1 and later and the .NET Framework 4.6.2 and later, see File path formats on Windows systems.

다음은 몇 가지 흔히 사용되는 파일 및 디렉터리 클래스입니다.Here are some commonly used file and directory classes:

  • File - 파일 만들기, 복사, 삭제, 이동 및 열기를 위한 정적 메서드를 제공하고 FileStream 개체 만들기를 지원합니다.File - provides static methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • FileInfo - 파일 만들기, 복사, 삭제, 이동 및 열기를 위한 인스턴스 메서드를 제공하고 FileStream 개체 만들기를 지원합니다.FileInfo - provides instance methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • Directory - 디렉터리와 하위 디렉터리를 통해 만들고, 이동하고, 열거하기 위한 정적 메서드를 제공합니다.Directory - provides static methods for creating, moving, and enumerating through directories and subdirectories.

  • DirectoryInfo - 디렉터리와 하위 디렉터리를 통해 만들고, 이동하고, 열거하기 위한 인스턴스 메서드를 제공합니다.DirectoryInfo - provides instance methods for creating, moving, and enumerating through directories and subdirectories.

  • Path - 플랫폼 간에 호환되는 방식으로 디렉터리 문자열을 처리하기 위한 메서드와 속성을 제공합니다.Path - provides methods and properties for processing directory strings in a cross-platform manner.

파일 시스템 메서드를 호출할 때 항상 강력한 예외 처리를 제공해야 합니다.You should always provide robust exception handling when calling filesystem methods. 자세한 내용은 I/O 오류 처리를 참조하세요.For more information, see Handling I/O errors.

Visual Basic 사용자는 이러한 클래스를 사용하는 것 외에도, 파일 I/O에 대한 Microsoft.VisualBasic.FileIO.FileSystem 클래스에서 제공하는 메서드와 속성을 사용할 수 있습니다.In addition to using these classes, Visual Basic users can use the methods and properties provided by the Microsoft.VisualBasic.FileIO.FileSystem class for file I/O.

방법: 디렉터리 복사, 방법: 디렉터리 목록 만들기방법: 디렉터리 및 파일 열거를 참조하세요.See How to: Copy Directories, How to: Create a Directory Listing, and How to: Enumerate Directories and Files.

스트림Streams

추상 기본 클래스 Stream은 바이트 읽기 및 쓰기를 지원합니다.The abstract base class Stream supports reading and writing bytes. 스트림을 나타내는 모든 클래스는 Stream 클래스로부터 상속됩니다.All classes that represent streams inherit from the Stream class. Stream 클래스와 이 클래스에서 파생되는 클래스는 데이터 소스와 리포지토리의 일반 뷰를 제공하고, 이때 프로그래머는 운영 체제 및 내부 장치의 세부 사항에서 격리됩니다.The Stream class and its derived classes provide a common view of data sources and repositories, and isolate the programmer from the specific details of the operating system and underlying devices.

스트림에는 다음의 세 가지 기본 작업이 포함됩니다.Streams involve three fundamental operations:

  • 읽기 - 스트림의 데이터를 바이트 배열과 같은 데이터 구조로 전송합니다.Reading - transferring data from a stream into a data structure, such as an array of bytes.

  • 쓰기 - 데이터 소스에서 스트림으로 데이터를 전송합니다.Writing - transferring data to a stream from a data source.

  • 검색 - 스트림 내에서 현재 위치를 쿼리하고 수정합니다.Seeking - querying and modifying the current position within a stream.

내부 데이터 소스 또는 리포지토리에 따라 스트림에서 이러한 기능 중 일부만 지원할 수도 있습니다.Depending on the underlying data source or repository, a stream might support only some of these capabilities. 예를 들어, PipeStream 클래스는 검색을 지원하지 않습니다.For example, the PipeStream class does not support seeking. CanRead, CanWrite, CanSeek 스트림 속성은 스트림이 지원하는 작업을 지정합니다.The CanRead, CanWrite, and CanSeek properties of a stream specify the operations that the stream supports.

다음은 몇 가지 자주 사용되는 스트림 클래스입니다.Here are some commonly used stream classes:

  • FileStream – 파일을 읽고 쓰는 데 사용됩니다.FileStream – for reading and writing to a file.

  • IsolatedStorageFileStream – 격리된 저장소의 파일을 읽고 파일에 기록하는 데 사용됩니다.IsolatedStorageFileStream – for reading and writing to a file in isolated storage.

  • MemoryStream – 메모리를 백업 저장소로 읽고 여기에 기록하는 데 사용됩니다.MemoryStream – for reading and writing to memory as the backing store.

  • BufferedStream – 읽기 및 쓰기 작업의 성능을 향상시키는 데 사용됩니다.BufferedStream – for improving performance of read and write operations.

  • NetworkStream – 네트워크 소켓을 통한 읽기 및 쓰기를 지원합니다.NetworkStream – for reading and writing over network sockets.

  • PipeStream – 익명 및 명명된 파이프를 통한 읽기와 쓰기를 지원합니다.PipeStream – for reading and writing over anonymous and named pipes.

  • CryptoStream – 데이터 스트림을 암호화 변형에 연결하는 데 사용됩니다.CryptoStream – for linking data streams to cryptographic transformations.

스트림의 비동기화 작업에 대한 예제는 비동기 파일 I/O를 참조하세요.For an example of working with streams asynchronously, see Asynchronous File I/O.

판독기 및 작성기Readers and writers

또한 System.IO 네임스페이스는 스트림으로부터 인코딩된 문자를 읽고 이를 스트림에 쓰기 위한 형식을 제공합니다.The System.IO namespace also provides types for reading encoded characters from streams and writing them to streams. 일반적으로 스트림은 바이트 입력 및 출력용으로 디자인됩니다.Typically, streams are designed for byte input and output. 판독기 및 작성기 형식은 스트림 작업을 완료할 수 있도록 인코딩된 문자와 바이트의 변환을 처리합니다.The reader and writer types handle the conversion of the encoded characters to and from bytes so the stream can complete the operation. 각 판독기 및 작성기 클래스는 스트림과 연결되어 있고, 이것은 클래스의 BaseStream 속성을 통해 검색될 수 있습니다.Each reader and writer class is associated with a stream, which can be retrieved through the class's BaseStream property.

일부 자주 사용되는 판독기 및 작성기 클래스는 다음과 같습니다.Here are some commonly used reader and writer classes:

  • BinaryReaderBinaryWriter – 기본 데이터 형식을 바이너리 값으로 읽고 쓰는 데 사용됩니다.BinaryReader and BinaryWriter – for reading and writing primitive data types as binary values.

  • StreamReaderStreamWriter – 인코딩 값을 사용하여 바이트에서 문자, 문자에서 바이트로 변환함으로써 문자를 읽고 쓰는 데 사용됩니다.StreamReader and StreamWriter – for reading and writing characters by using an encoding value to convert the characters to and from bytes.

  • StringReaderStringWriter – 문자열에서 문자를, 문자에서 문자열을 읽고 쓰는 데 사용됩니다.StringReader and StringWriter – for reading and writing characters to and from strings.

  • TextReaderTextWriter – 이진 데이터가 아닌 문자 및 문자열을 읽고 쓰는 다른 판독기와 작성기에 대한 추상 기본 클래스로 사용됩니다.TextReader and TextWriter – serve as the abstract base classes for other readers and writers that read and write characters and strings, but not binary data.

방법: 파일에서 텍스트 읽기, 방법: 파일에 텍스트 쓰기, 방법: 문자열에서 문자 읽기방법: 문자열에 문자 쓰기를 참조하세요.See How to: Read Text from a File, How to: Write Text to a File, How to: Read Characters from a String, and How to: Write Characters to a String.

비동기 I/O 작업Asynchronous I/O operations

많은 양의 데이터를 읽거나 쓸 때 리소스가 많이 사용될 수 있습니다.Reading or writing a large amount of data can be resource-intensive. 이러한 작업은 애플리케이션 사용자에게 응답을 유지해야 하는 경우 비동기적으로 수행해야 합니다.You should perform these tasks asynchronously if your application needs to remain responsive to the user. 동기 I/O 작업에서 UI 스레드는 리소스 집약적인 작업이 완료될 때까지 차단됩니다.With synchronous I/O operations, the UI thread is blocked until the resource-intensive operation has completed. Windows 8.x 스토어Windows 8.x Store 응용 프로그램을 개발할 때 비동기 I/O 작업을 사용하여 응용 프로그램이 작동을 멈춘 것처럼 보이지 않게 해줍니다.Use asynchronous I/O operations when developing Windows 8.x 스토어Windows 8.x Store apps to prevent creating the impression that your app has stopped working.

비동기 멤버의 이름에는 Async가 포함됩니다(예: CopyToAsync, FlushAsync, ReadAsyncWriteAsync 메서드).The asynchronous members contain Async in their names, such as the CopyToAsync, FlushAsync, ReadAsync, and WriteAsync methods. 이러한 메서드는 asyncawait 키워드와 함께 사용합니다.You use these methods with the async and await keywords.

자세한 내용은 비동기 파일 I/O를 참조하세요.For more information, see Asynchronous File I/O.

압축Compression

압축은 스토리지에 맞춰 파일 크기를 줄이는 프로세스를 가리킵니다.Compression refers to the process of reducing the size of a file for storage. 압축 해제는 압축된 파일의 내용을 사용 가능한 형식으로 추출하는 프로세스입니다.Decompression is the process of extracting the contents of a compressed file so they are in a usable format. System.IO.Compression 네임스페이스는 파일 및 스트림을 압축하고 압축을 푸는 형식을 포함합니다.The System.IO.Compression namespace contains types for compressing and decompressing files and streams.

다음 클래스는 파일과 스트림을 압축하고 압축 해제할 때 자주 사용됩니다.The following classes are frequently used when compressing and decompressing files and streams:

  • ZipArchive – zip 보관 파일에 항목을 만들고 이를 검색하는 데 사용됩니다.ZipArchive – for creating and retrieving entries in the zip archive.

  • ZipArchiveEntry – 압축된 파일을 표시할 때 사용됩니다.ZipArchiveEntry – for representing a compressed file.

  • ZipFile – 압축된 패키지를 만들고 추출하고 여는 데 사용됩니다.ZipFile – for creating, extracting, and opening a compressed package.

  • ZipFileExtensions – 압축된 패키지에 항목을 만들고 추출하는 데 사용됩니다.ZipFileExtensions – for creating and extracting entries in a compressed package.

  • DeflateStream – Deflate 알고리즘을 사용하여 스트림을 압축 및 압축 해제하는 데 사용됩니다.DeflateStream – for compressing and decompressing streams using the Deflate algorithm.

  • GZipStream – gzip 데이터 형식의 스트림을 압축 및 압축 해제하는 데 사용됩니다.GZipStream – for compressing and decompressing streams in gzip data format.

방법: 파일 압축 및 추출을 참조하세요.See How to: Compress and Extract Files.

격리된 스토리지Isolated storage

격리된 스토리지는 코드와 저장된 데이터를 연결하는 표준화된 방법을 정의하여 격리와 안전을 제공하는 데이터 스토리지 메커니즘입니다.Isolated storage is a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data. 스토리지는 사용자, 어셈블리 및 도메인(옵션)에 의해 격리된 가상 파일 시스템을 제공합니다.The storage provides a virtual file system that is isolated by user, assembly, and (optionally) domain. 격리된 저장소는 애플리케이션에 사용자 파일을 액세스할 수 있는 권한이 없는 경우 특히 유용합니다.Isolated storage is particularly useful when your application does not have permission to access user files. 컴퓨터의 보안 정책에 의해 제어되는 방식으로 애플리케이션에 대한 설정이나 파일을 저장할 수 있습니다.You can save settings or files for your application in a manner that is controlled by the computer's security policy.

격리된 저장소는 Windows 8.x 스토어Windows 8.x Store앱에 사용할 수 없습니다. 대신 Windows.Storage네임스페이스의 애플리케이션 데이터 클래스를 사용합니다.Isolated storage is not available for Windows 8.x 스토어Windows 8.x Store apps; instead, use application data classes in the Windows.Storage namespace. 자세한 내용은 애플리케이션 데이터를 참조하세요.For more information, see Application data.

다음의 클래스는 격리된 스토리지를 구현할 때 자주 사용됩니다.The following classes are frequently used when implementing isolated storage:

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

Windows 스토어 앱에서 I/O 작업I/O operations in Windows Store apps

Windows 8.x 스토어 앱용 .NET.NET for Windows 8.x Store apps에는 스트림에서 읽고 스트림에 쓰기 위한 다양한 형식이 포함됩니다. 하지만, 이 세트에 모든 .NET Framework I/O 형식이 포함되는 것은 아닙니다.The Windows 8.x 스토어 앱용 .NET.NET for Windows 8.x Store apps contains many of the types for reading from and writing to streams; however, this set does not include all the .NET Framework I/O types.

다음은 Windows 8.x 스토어Windows 8.x Store 응용 프로그램에서 I/O 작업을 사용할 때 알아야 할 몇 가지 중요한 차이점입니다.Some important differences to note when using I/O operations in Windows 8.x 스토어Windows 8.x Store apps:

필요하다면 .NET Framework 스트림과 Windows 런타임 스트림 간에 변환할 수 있습니다.You can convert between .NET Framework streams and Windows Runtime streams, if necessary. 자세한 내용은 방법: .NET Framework 스트림과 Windows 런타임 스트림 간 변환 또는 WindowsRuntimeStreamExtensions을 참조하세요.For more information, see How to: Convert Between .NET Framework Streams and Windows Runtime Streams or WindowsRuntimeStreamExtensions.

Windows 8.x 스토어Windows 8.x Store 앱에서 I/O 작업에 대한 자세한 내용은 빠른 시작: 파일 읽기 및 쓰기를 참조하세요.For more information about I/O operations in a Windows 8.x 스토어Windows 8.x Store app, see Quickstart: Reading and writing files.

I/O 및 보안I/O and security

System.IO 네임스페이스에서 클래스를 사용할 때, 파일 및 디렉터리에 대한 액세스를 제어하기 위해 액세스 제어 목록(ACL)과 같은 운영 체제 보안 요구 사항을 따라야 합니다.When you use the classes in the System.IO namespace, you must follow operating system security requirements such as access control lists (ACLs) to control access to files and directories. FileIOPermission 요구 사항에 이 요구 사항이 추가됩니다.This requirement is in addition to any FileIOPermission requirements. ACL은 프로그래밍 방식으로 관리할 수 있습니다.You can manage ACLs programmatically. 자세한 내용은 방법: 액세스 제어 목록 항목 추가 또는 제거를 참조하세요.For more information, see How to: Add or Remove Access Control List Entries.

기본 보안 정책은 인터넷 또는 인트라넷 애플리케이션에서 사용자의 컴퓨터에 있는 파일의 액세스를 방지합니다.Default security policies prevent Internet or intranet applications from accessing files on the user’s computer. 따라서 실제 파일의 경로를 인터넷이나 인트라넷을 통해 다운로드되는 코드를 작성할 때 필요한 I/O 클래스를 사용하지 마세요.Therefore, do not use the I/O classes that require a path to a physical file when writing code that will be downloaded over the Internet or intranet. 대신에 기존의 .NET Framework 애플리케이션의 경우 격리된 저장소를 사용하거나 Windows 8.x 스토어Windows 8.x Store 애플리케이션의 경우 애플리케이션 데이터를 사용합니다.Instead, use isolated storage for traditional .NET Framework applications, or use application data for Windows 8.x 스토어Windows 8.x Store apps.

스트림이 생성될 때만 보안 검사가 수행됩니다.A security check is performed only when the stream is constructed. 따라서 스트림을 열지 말고, 이것을 신뢰할 수 없는 코드 또는 애플리케이션 도메인으로 전달합니다.Therefore, do not open a stream and then pass it to less-trusted code or application domains.

  • 공통 I/O 작업Common I/O Tasks
    파일, 디렉터리 및 스트림과 관련된 I/O 작업 목록과 각 작업에 대한 예제 및 관련 내용에 대한 링크를 제공합니다.Provides a list of I/O tasks associated with files, directories, and streams, and links to relevant content and examples for each task.

  • 비동기 파일 I/OAsynchronous File I/O
    비동기 I/O의 기본 연산 및 성능상의 이점에 대해 설명합니다.Describes the performance advantages and basic operation of asynchronous I/O.

  • 격리된 스토리지Isolated Storage
    코드와 저장된 데이터를 연결하는 표준화된 방법을 정의하여 격리와 안전을 제공하는 데이터 스토리지 메커니즘에 대해 설명합니다.Describes a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data.

  • 파이프Pipes
    .NET Framework에서 익명 사용자와 명명된 파이프 작업에 대해 설명합니다.Describes anonymous and named pipe operations in the .NET Framework.

  • 메모리 매핑된 파일Memory-Mapped Files
    가상 메모리의 디스크에 있는 파일의 내용을 포함하는 메모리 매핑된 파일에 대해 설명합니다.Describes memory-mapped files, which contain the contents of files on disk in virtual memory. 메모리 매핑된 파일을 사용하면 매우 큰 파일을 편집하고 프로세스 간 통신을 위한 공유 메모리를 만들 수 있습니다.You can use memory-mapped files to edit very large files and to create shared memory for interprocess communication.