이 문서는 이 API에 대한 참조 설명서를 보충하는 추가 설명을 제공합니다.
클래스를 FileStream 사용하여 파일 시스템에서 파일을 읽고, 쓰고, 열고, 닫고, 파이프, 표준 입력 및 표준 출력을 비롯한 다른 파일 관련 운영 체제 핸들을 조작할 수 있습니다. 메서드 Read, Write, CopyTo, 및 Flush를 사용하여 동기 작업을 수행하거나, 메서드 ReadAsync, WriteAsync, CopyToAsync, 및 FlushAsync를 사용하여 비동기 작업을 수행할 수 있습니다. 비동기 메서드를 사용하여 주 스레드를 차단하지 않고 리소스 집약적 파일 작업을 수행합니다. 이 성능 고려 사항은 시간이 많이 걸리는 스트림 작업이 UI 스레드를 차단하고 앱이 작동하지 않는 것처럼 표시되도록 할 수 있는 Windows 8.x 스토어 앱 또는 데스크톱 앱에서 특히 중요합니다. FileStream 는 더 나은 성능을 위해 입력 및 출력을 버퍼링합니다.
중요합니다
이 형식은 IDisposable 인터페이스를 구현합니다. 형식 사용을 마쳤으면 직접 또는 간접적으로 삭제해야 합니다. 형식을 직접 삭제하려면 Disposetry
/ 블록에서 해당 catch
메서드를 호출합니다. 간접적으로 삭제하려면 using
(C#) 또는 Using
(Visual Basic)와 같은 언어 구문을 사용합니다. 자세한 내용은 인터페이스 항목의 "IDisposable을 구현하는 개체 사용" 섹션을 IDisposable 참조하세요.
이 속성은 IsAsync 파일 핸들이 비동기적으로 열렸는지 여부를 검색합니다. 생성자에 FileStream, isAsync
, 또는 useAsync
매개 변수가 있을 때 options
클래스의 인스턴스를 만들 때 이 값을 지정합니다. 속성이 true
인 경우, 스트림은 오버랩된 I/O를 사용하여 파일 작업을 비동기적으로 수행합니다. 그러나 IsAsync 속성은 true
, ReadAsync 또는 WriteAsync 메서드를 호출하기 위해 CopyToAsync일 필요가 없습니다.
IsAsync 속성이 false
있고 비동기 읽기 및 쓰기 작업을 호출하는 경우 UI 스레드는 여전히 차단되지 않지만 실제 I/O 작업은 동기적으로 수행됩니다.
이 메서드는 Seek 파일에 대한 임의 액세스를 지원합니다. Seek 를 사용하면 파일 내의 모든 위치로 읽기/쓰기 위치를 이동할 수 있습니다. 이 작업은 바이트 오프셋 참조 지점 매개 변수를 사용하여 수행됩니다. 바이트 오프셋은 열거형의 세 멤버 SeekOrigin 가 나타내는 대로 시작, 현재 위치 또는 기본 파일의 끝일 수 있는 검색 참조 지점을 기준으로 합니다.
비고
디스크 파일은 항상 임의 액세스를 지원합니다. 생성 당시 CanSeek 속성 값은 기본 파일 형식에 따라 true
또는 false
로 설정됩니다. winbase.h에 정의된 대로 기본 파일 형식이 FILE_TYPE_DISK인 경우, CanSeek 속성 값은 true
입니다. 그렇지 않으면 속성 값은 CanSeekfalse
입니다.
프로세스가 파일의 일부를 잠갔다가 종료되거나, 해결되지 않은 잠금이 있는 파일을 닫으면 동작이 정의되지 않습니다.
디렉터리 작업 및 기타 파일 작업에 대해서는 File, Directory, Path 클래스를 참조하세요. 이 File 클래스는 주로 파일 경로를 기반으로 개체를 만들기 FileStream 위한 정적 메서드가 있는 유틸리티 클래스입니다. 클래스는 MemoryStream 바이트 배열에서 스트림을 만들고 클래스와 비슷합니다 FileStream .
일반적인 파일 및 디렉터리 작업 목록은 일반적인 I/O 작업을 참조하세요.
스트림 위치 변경 탐지
FileStream 개체의 핸들에 배타적 보류가 없는 경우 다른 스레드는 파일 핸들에 동시에 액세스하고 파일 핸들과 연결된 운영 체제의 파일 포인터 위치를 변경할 수 있습니다. 이 경우 개체의 캐시된 위치 FileStream 와 버퍼의 캐시된 데이터가 손상될 수 있습니다. 개체는 FileStream 캐시된 버퍼에 액세스하는 메서드에 대한 검사를 정기적으로 수행하여 운영 체제의 핸들 위치가 개체에서 사용하는 FileStream 캐시된 위치와 동일한지 확인합니다.
메서드 호출 Read 에서 핸들 위치의 예기치 않은 변경이 감지되면 .NET은 버퍼의 내용을 삭제하고 파일에서 스트림을 다시 읽습니다. 이는 파일의 크기 및 파일 스트림의 위치에 영향을 줄 수 있는 다른 프로세스에 따라 성능에 영향을 줄 수 있습니다.
메서드 호출 Write 에서 핸들 위치의 예기치 않은 변경이 감지되면 버퍼의 내용이 삭제되고 예외가 IOException throw됩니다.
FileStream 개체가 핸들을 노출하기 위해 SafeFileHandle 속성에 액세스할 때 또는 생성자에서 FileStream 속성을 SafeFileHandle 개체에 제공할 때 해당 핸들에 대한 배타적인 보류가 없습니다.
.NET