다음을 통해 공유


FileStream.BeginRead 메서드

비동기 읽기 작업을 시작합니다.

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

구문

‘선언
Public Overrides Function BeginRead ( _
    array As Byte(), _
    offset As Integer, _
    numBytes As Integer, _
    userCallback As AsyncCallback, _
    stateObject As Object _
) As IAsyncResult
‘사용 방법
Dim instance As FileStream
Dim array As Byte()
Dim offset As Integer
Dim numBytes As Integer
Dim userCallback As AsyncCallback
Dim stateObject As Object
Dim returnValue As IAsyncResult

returnValue = instance.BeginRead(array, offset, numBytes, userCallback, stateObject)
public override IAsyncResult BeginRead (
    byte[] array,
    int offset,
    int numBytes,
    AsyncCallback userCallback,
    Object stateObject
)
public:
virtual IAsyncResult^ BeginRead (
    array<unsigned char>^ array, 
    int offset, 
    int numBytes, 
    AsyncCallback^ userCallback, 
    Object^ stateObject
) override
public IAsyncResult BeginRead (
    byte[] array, 
    int offset, 
    int numBytes, 
    AsyncCallback userCallback, 
    Object stateObject
)
public override function BeginRead (
    array : byte[], 
    offset : int, 
    numBytes : int, 
    userCallback : AsyncCallback, 
    stateObject : Object
) : IAsyncResult

매개 변수

  • array
    데이터를 읽어올 버퍼입니다.
  • offset
    읽기를 시작할 array의 바이트 오프셋입니다.
  • numBytes
    읽을 최대 바이트 수입니다.
  • userCallback
    비동기 읽기 작업이 완료되면 호출될 메서드입니다.
  • stateObject
    다른 요청에서 특정 비동기 읽기 요청을 구별하는 사용자 제공 개체입니다.

반환 값

비동기 읽기를 참조하는 IAsyncResult입니다.

예외

예외 형식 조건

ArgumentException

배열 길이에서 offset을 빼면 numBytes보다 작은 경우

ArgumentNullException

array가 Null 참조(Visual Basic의 경우 Nothing)인 경우

ArgumentOutOfRangeException

offset 또는 numBytes가 음수인 경우

IOException

파일 끝을 지나 비동기 읽기를 시도한 경우

설명

EndReadBeginRead를 호출할 때마다 한 번씩 호출해야 합니다. 다른 읽기 작업을 시작하기 전에 읽기 프로세스를 종료하지 못하면 교착 상태와 같이 원하지 않는 동작이 발생할 수 있습니다.

FileStream은 동기 I/O와 비동기 I/O의 서로 다른 두 가지 작업 모드를 제공하지만 내부 운영 체제 리소스에서는 이 모드 중 하나에서만 액세스할 수 있는 경우도 있습니다. 기본적으로 FileStream은 운영 체제 핸들을 동기적으로 열기 때문에 Windows에서 비동기 메서드의 속도가 저하됩니다. 비동기 메서드가 사용되면, FileStream(String,FileMode,FileAccess,FileShare,Int32,Boolean) 생성자를 사용하십시오.

참고

현재 인스턴스가 읽기를 지원하는지 여부를 결정하려면 CanRead 속성을 사용합니다. 자세한 내용은 CanRead을 참조하십시오.

스트림이 닫혀 있거나 잘못된 인수를 전달하는 경우 BeginRead에서 즉시 예외가 throw됩니다. IO 요청 중에 발생하는 디스크 오류 같이 비동기 읽기 요청 중에 발생하는 오류는 스레드 풀 스레드에서 발생하고 EndRead를 호출하면 표시됩니다.

참고

Windows에서는 64KB 미만의 모든 I/O 작업은 성능 향상을 위해 동기적으로 완료됩니다. 비동기 I/O는 버퍼 크기가 64KB 미만인 경우 성능을 저하시킬 수 있습니다.

읽은 바이트 수를 확인하려면 IAsyncResult를 사용하여 EndRead를 호출해야 합니다.

비동기 요청을 동시에 여러 번 시도하면 요청 완료 순서가 불확실해집니다.

다음 표에서는 일반적인 예 또는 관련된 I/O 작업의 예를 보여 줍니다.

수행 작업

참조 항목

텍스트 파일을 만듭니다.

방법: 파일에 텍스트 쓰기

텍스트 파일에 씁니다.

방법: 파일에 텍스트 쓰기

텍스트 파일에서 읽습니다.

방법: 파일의 텍스트 읽기

파일에 텍스트를 추가합니다.

방법: 로그 파일 열기 및 추가

File.AppendText

FileInfo.AppendText

파일 이름을 바꾸거나 이동합니다.

File.Move

FileInfo.MoveTo

파일을 복사합니다.

File.Copy

FileInfo.CopyTo

파일 크기를 가져옵니다.

FileInfo.Length

파일 특성을 가져옵니다.

File.GetAttributes

파일의 특성을 설정합니다.

File.SetAttributes

파일이 있는지 여부를 확인합니다.

File.Exists

이진 파일에서 읽습니다.

방법: 새로 만든 데이터 파일 읽기 및 쓰기

이진 파일에 씁니다.

방법: 새로 만든 데이터 파일 읽기 및 쓰기

디렉터리를 만듭니다.

Directory.CreateDirectory

Directory.CreateDirectory

예제

이 코드 예제는 FileStream(String,FileMode,FileAccess,FileShare,Int32,Boolean) 생성자에 대해 제공되는 보다 큰 예제의 일부입니다.

Private Shared Sub EndWriteCallback(asyncResult As IAsyncResult)
    Dim tempState As State = _
        DirectCast(asyncResult.AsyncState, State)
    Dim fStream As FileStream = tempState.FStream
    fStream.EndWrite(asyncResult)

    ' Asynchronously read back the written data.
    fStream.Position = 0
    asyncResult = fStream.BeginRead( _ 
        tempState.ReadArray, 0 , tempState.ReadArray.Length, _
        AddressOf EndReadCallback, tempState)

    ' Concurrently do other work, such as 
    ' logging the write operation.
End Sub
static void EndWriteCallback(IAsyncResult asyncResult)
{
    State tempState = (State)asyncResult.AsyncState;
    FileStream fStream = tempState.FStream;
    fStream.EndWrite(asyncResult);

    // Asynchronously read back the written data.
    fStream.Position = 0;
    asyncResult = fStream.BeginRead(
        tempState.ReadArray, 0 , tempState.ReadArray.Length, 
        new AsyncCallback(EndReadCallback), tempState);

    // Concurrently do other work, such as 
    // logging the write operation.
}
   static void EndWriteCallback( IAsyncResult^ asyncResult )
   {
      State^ tempState = dynamic_cast<State^>(asyncResult->AsyncState);
      FileStream^ fStream = tempState->FStream;
      fStream->EndWrite( asyncResult );
      
      // Asynchronously read back the written data.
      fStream->Position = 0;
      asyncResult = fStream->BeginRead( tempState->ReadArray, 0, tempState->ReadArray->Length, gcnew AsyncCallback( &FStream::EndReadCallback ), tempState );
      
      // Concurrently do other work, such as 
      // logging the write operation.
   }

};

static void EndWriteCallback(IAsyncResult asyncResult)
{
    State tempState = ((State)(asyncResult.get_AsyncState()));
    FileStream fStream = tempState.get_FStream();
    fStream.EndWrite(asyncResult);

    // Asynchronously read back the written data.
    fStream.set_Position(0);
    asyncResult = fStream.BeginRead(tempState.get_ReadArray(), 0,
        tempState.get_ReadArray().length , 
        new AsyncCallback(EndReadCallback), tempState);

    // Concurrently do other work, such as 
    // logging the write operation.
} //EndWriteCallback

플랫폼

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

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

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

FileStream 클래스
FileStream 멤버
System.IO 네임스페이스

기타 리소스

파일 및 스트림 I/O
방법: 파일의 텍스트 읽기
방법: 파일에 텍스트 쓰기
비동기 파일 I/O