Delphi에서 읽기 및 쓰기(I/O)에 사용되는 세 가지 파일 유형
1. 이전 파스칼 파일 형식
F:text, F:File과 같은 기존 파일 변수로 표시되는 파일 유형 유형, 유형 없음, 문자 유형 및 일부 Delphi 파일 작업 기능의 세 가지 범주가 정의됩니다(예: AssignPRn, Writeln). 이러한 파일 클래스는 Windows와 유사합니다. 파일 핸들이 호환되지 않습니다
2. 윈도우 파일 핸들(handle)
객체 지향 파스칼 파일 핸들은 Windows 파일 핸들 유형을 캡슐화하고, 파일 작업 함수 라이브러리는 Windows API 함수를 캡슐화합니다. 예를 들어, "Fileread"는 Windows API 함수 "ReadFile"을 호출합니다. Windows API에 익숙하다면 Windows 파일 문을 사용하여 파일 작업을 수행할 수 있습니다.
3. 파일 스트림
파일 스트림은 TFileStream 클래스의 객체 인스턴스입니다. TFileStream은 핸들 속성을 제공하여 Windows 파일 핸들 유형을 작동할 수 있습니다.
파일 형식을 선택하는 방법
Windows 파일 핸들은 유연한 동기 및 비동기 파일 읽기 및 쓰기 제어를 제공하는 하위 수준 파일 작업 유형입니다. 다음은 Windows 파일 핸들 유형을 사용하는 파일 동기화 및 비동기 작업에 대한 의사 코드 설명을 제공합니다.
동기 작업:
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);
// eof를 확인합니다.
if (bResult && nBytesRead == 0, ) {
// 파일의 끝에 있습니다
}
비동기 작업:
// 중첩된 구조 필드 설정
gOverLapped.Offset = 0;
gOverLapped.OffsetHigh = 0;
gOverLapped.hEvent = NULL;
// 비동기 읽기 작업을 시도합니다.
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead,
&g겹침) ;
// 문제가 있거나 비동기 작업이 아직 보류 중인 경우...
if (!b결과)
{
//오류코드 처리
스위치(dwError = GetLastError())
{
케이스 ERROR_HANDLE_EOF:
{
// 파일 끝에 도달했습니다.
//ReadFile을 호출하는 동안
// 이를 처리하는 코드
}
케이스 ERROR_IO_PENDING:
{
// 비동기 I/O가 아직 진행 중입니다.
// 잠시 동안 다른 일을 하세요
GoDoSomethingElse() ;
// 비동기 읽기 결과를 확인합니다.
bResult = GetOverlappedResult(hFile, &gOverlapped,
&nBytesRead, FALSE) ;
//문제가 있었다면...
if (!b결과)
{
//오류코드 처리
스위치(dwError = GetLastError())
{
케이스 ERROR_HANDLE_EOF:
{
// 파일 끝에 도달했습니다.
비동기 작업 중 파일
}
// 다른 오류 사례를 처리합니다.
}
}
} // 케이스 종료
// 다른 오류 사례를 처리합니다.
} // 스위치 종료
} // 종료되는 경우
Windows 파일 핸들은 유연한 파일 제어를 제공하지만 더 많은 오류 처리 코드를 작성해야 합니다.
Windows API에 익숙하지 않은 경우 Delphi에서 권장하는 이전 파일 변수 유형을 사용하십시오.
Delphi의 이전 파일 유형은 AssignFile을 사용하여 파일 변수를 Delphi에서 정의한 실제 파일과 연결합니다.
파일 액세스 및 작업을 완료하기 위한 다양한 파일 변수 작업 다음은 사용하기 쉬운 파일 변수 클래스를 제공합니다.
유형 작업 코드 설명:
var
F: 텍스트파일;
S: 문자열;
시작하다
if OpenDialog1.Execute then { 열기 대화 상자 표시 }
시작하다
AssignFile(F, OpenDialog1.FileName) { 대화 상자에서 선택한 파일 }
재설정(F);
Readln(F, S); { 파일의 첫 번째 줄을 읽습니다. }
Edit1.Text := S; { TEdit 컨트롤에 문자열 넣기 }
닫기파일(F);
끝;
끝;
파일 스트림은 스트림(스트림 클래스)의 하위 클래스이므로 이를 사용하면 상위 클래스의 속성을 자동으로 상속할 수 있다는 점입니다. 예를 들어 동적 스트림을 작성하려는 경우. 메모리 블록 디스크에 TFileStream 및 TMemoryStream을 사용하여 완료할 수 있습니다.