델파이 파일입출력 관련 함수 모음
Append System Unit
문법 : procedure Append(var f:Text);
파일을 추가 기록용으로 오픈한다. 파일 변수 F는 Assign으로
외부 파일과 연결되어 있어야 한다. 외부 파일이 없으면 에러
가 발생하며 이미 열려 있는 경우는 파일을 닫은 후 다시 연
다. 파일을 오픈한 후 FP는 파일 끝(EOF)에 위치시키므로 추
가적인 데이터를 파일 끝에 추가할 수 있다. 다음 예는 루트
디렉토리의 AUTOEXEC.BAT 파일 끝에 PROMPT문을 추가
한다.
var
F: TextFile;
begin
AssignFile(F, 'c:\autoexec.bat');
Append(F); { 파일 오픈 }
Writeln(F, 'prompt $p$g');
CloseFile(F); { 파일 닫음 }
end;
end.
AssignCrt WinCrt Unit
문법 : procedure AssignCrt(var f:Text);
텍스트 파일 변수를 CRT 윈도우와 연결한다. CRT와 연결된
텍스트 파일은 텍스트 환경의 화면을 에뮬레이션하며 이 파
일로 문자열을 출력하면 CRT 화면으로 문자열이 출력된다.
표준 입출력 명령보다 텍스트 파일을 사용하여 CRT로 입출
력하는 것이 속도가 조금 더 빠르다. 다음 예는 SF라는 텍스
트 파일을 CRT로 연결하여 문자열을 출력한다.
var
SF:TextFile;
begin
AssignCRT(SF);
Rewrite(SF);
Writeln(SF,'Screen File');
CloseFile(SF);
end;
AssignFile system Unit
문법 : procedure AssignFile(var f,String);
텍스트 파일 변수와 외부 파일을 연결한다. 즉 파일 핸들에
파일을 할당한다. 일단 파일과 핸들이 연결되면 핸들에 대한
모든 조작은 파일로 입출력된다. 이 프로시저로 핸들에 파일
을 할당한 후 Reset이나 Rewrite 등을 사용하여 파일을 오픈하
며 WriteLn이나 Readln으로 파일 입출력을 수행한다. 파일 이
름은 문자열 형태로 전달하되 필요할 경우 드라이브명과 디
렉토리명을 사용할 수 있다. 주의할 것은 이미 열려져 있는
파일 핸들을 재할당해서는 안된다는 점이다. 다음 예는
test.txt 파일에서 첫 줄을 읽어 에디트 박스로 출력한다.
var
F: TextFile;
S: String;
begin
AssignFile(F, 'test.txt');
Reset(F);
Readln(F, S);
Edit1.Text := S;
CloseFile(F);
end.
BlockRead system Unit
문법 : procedure BlockRead(var f:File; var Buf; Count:Word
[;var Result: Word]);
파일로부터 한 개 또는 다수 개의 레코드를 Buf 메모리 영역
으로 읽어들인다. F는 언타입드 파일 변수이며 Buf는 어떤 형
의 변수든지 상관없다. 읽혀지는 레코드의 개수는 Count인수
로 설정하며 실제로 읽혀진 레코드 수는 Result 인수로 리턴
된다. 파일로부터 읽혀진 레코드는 Buf 변수가 차지하고 있
는 메모리의 시작 위치에 기록된다. 리턴값인 Result가 Count
인수와 같은 값을 가지면 요구한 레코드가 전부 읽혀진 것이
며 Result가 Count보다 더 작은 값을 가지면 파일을 읽는 중에
EOF를 만난 것이다.
BlockWrite system Unit
문법 : procedure BlockWrite(var f:File; var Buf; Count:Word
[;var Result: Word]);
파일로 한 개 또는 다수 개의 레코드를 출력한다. F는 언타입
드 파일 변수이며 Buf는 어떤 형의 변수든지 상관없다. 파일
로 출력되는 레코드의 개수는 Count 인수로 설정하며 실제로
출력된 레코드 수는 Result 인수로 리턴된다. 파일로 출력되
는 레코드는 Buf 변수가 차지하고 있는 메모리의 시작 위치
에 있어야 한다. 리턴값인 Reulst가 Count 인수와 같은 값을 가
지면 요구한 레코드가 이상없이 출력된 것이며 Result가
Count보다 더 작은 값을 가지면 디스크의 용량이 부족하여
레코드를 모두 출력하지 못한 것이다.
ChangeFileExt system Unit
문법 : function ChangeFileExt(const FileName, Extension:
string):string;
첫 번째 인수 FileName으로 주어진 파일의 이름 중 파일의 확
장자만 두 번째 인수 Extension으로 변경한다. 다음 예는 인수
로 주어진 파일의 확장자를 무조건 INI로 변경한다.
ChangeFileExt(ParamStr(0), '.INI');
Chdir system Unit
문법 : procedure ChDir(S: String);
인수 S가 지정하는 경로로 현재 디렉토리를 변경한다. 만약 S
가 드라이브 문자를 포함하고 있을 경우 현재 드라이브도 변
경된다.
Close system Unit
문법 : procedure Close(var F);
파일 핸들과 외부 파일과의 연결을 끊고 파일 핸들을 닫는다.
이 함수는 구 버전의 볼랜드 파스칼 컴파일러와의 호환성을
위해 제공되며 델파이에서는 사용되지 않는다. 델파이에서
는 핸들을 닫는 CloseFile이라는 별도의 함수를 제공하므로
이 함수를 사용하도록 한다.
CloseFile system Unit
문법 : procedure CloseFile(var F);
파일 핸들과 외부 파일과의 연결을 끊고 파일 핸들을 닫는다.
파일 변수 F는 Reset, Rewrite, Append 등에 의하여 오픈된 파
일 핸들이며 파일 핸들은 사용 후에 반드시 닫아주어야 한다.
DirectoryExists FileCtrl Unit
문법 : function DirectoryExists(Name: string): Boolean;
인수로 전달된 디렉토리가 존재하는지 검사하며 존재할 경
우 True를 리턴하고 존재하지 않을 경우 False를 리턴한다.
DiskFree SysUtils Unit
문법 : function DiskFree(Drive: Byte): Longint;
인수로 지정한 Drive에 사용 가능한 용량을 조사해준다. 드라
이브 번호는 0이 현재 드라이브, 1이 A, 2가 B 등이다. 드라이
브 번호가 잘못되었을 경우는 -1을 리턴한다.
DiskSize SysUtils Unit
문법 : function DiskSize(Drive: Byte): Longint;
인수로 지정한 Drive의 총 용량을 조사해준다. 드라이브 번호
는 0이 현재 드라이브, 1이 A, 2가 B 등이다. 드라이브 번호가
잘못되었을 경우는 -1을 리턴한다.
Eof system Unit
문법 : function Eof [ (var F:Text) ]:Boolean;
파일 변수 F의 현재 위치(FP)가 파일의 끝일 경우 True를 리턴
한다. 다음 예제는 input.dat파일을 output.dat파일로 복사한다.
두 파일을 열어놓고 입력 파일에서 읽어 출력 파일로 쓰기를
입력파일의 끝까지 반복한다. 이 때 입력 파일의 끝인가를 점
검하기 위해 Eof 함수가 사용되었다. 파일의 처음부터 끝까
지 한 바이트씩 순서대로 작업을 해야할 경우에 사용한다.
var
F1, F2: TextFile;
Ch: Char;
begin
AssignFile(F1, 'input.dat');
Reset(F1);
AssignFile(F2, 'output.dat');
Rewrite(F2);
while not Eof(F1) do
begin
Read(F1, Ch);
Write(F2, Ch);
end;
CloseFile(F2);
CloseFile(F1);
end.
Eoln system Unit
문법 : function Eoln [ {var F:Text) ]:Boolean;
파일 변수 F의 현재 위치(FP)가 한 줄의 끝인지를 점검하고
줄끝일 경우 True를 리턴한다. 한 줄씩 처리하고자 할 때 이
함수를 사용한다.
Erase system Unit
문법 : procedure Erase(var F);
외부 파일을 삭제한다. DeleteFile은 파일명으로 삭제하는 반
면 이 프로시저는 파일 핸들로 파일을 삭제한다. 파일을 삭제
한 후 파일 핸들은 자동으로 닫혀진다.
ExpandFileName SysUtils Unit
문법 : function ExpandFileName(const FileName: string):
string;
파일 이름에 드라이브명과 디렉토리명을 붙여 완전 경로(full
path)를 만들어낸다. 덧붙여지는 경로는 현재 드라이브와 현
재 디렉토리이다.
ExtractFileExt SysUtils Unit
문법 : function ExtractFileExt(const FileName string): string;
완전 경로에서 파일의 확장자만 분리시킨다. 특정 파일의 확
장자를 알고자 할 때 이 함수를 사용하여 확장자만 분리한 후
문자열 비교를 수행하면 된다.
ExtractFileName SysUtils Unit
문법 : function ExtractFileName(const FileName: string):
string;
완전 경로에서 파일 이름만 분리해 낸다. 파일의 확장자도 같
이 분리된다. 즉 완전 경로에서 드라이브명과 디렉토리 명이
제외된다.
ExtractFilePath SysUtils Unit
문법 : function ExtractFilePath(const FileName: string):
string;
완전 경로에서 파일 이름을 제외하고 드라이브명과 디렉토
리명만 분리해 낸다. 다음 예는 완전 경로를 가진 FileName으
로부터 경로만 분리해낸 후 파일이 있는 디렉토리로 이동한다.
ChDir(ExtractFilePath(FileName));
FileAge SysUtils Unit
문법 : function FileAge(const FileName: string): Longint;
파일의 날짜와 시간을 구해낸다.
FileClose SysUtils Unit
문법 : procedure FileClose(Handle: Integer);
파일 핸들을 닫는다. 파일 입출력을 위해 파일 변수에 외부
파일을 연결한 경우 핸들을 다 사용한 후에 반드시 파일 핸들
을 닫아 주어야 한다.
FileExists SysUtils Unit
문법 : function FileExists(const FileName: string): Boolean;
파일이 디스크 상에 존재하는지를 조사하며 파일이 없을 경
우 False를 리턴한다. 존재하지 않는 파일을 사용하고자 할 경
우 예외가 발생하므로 먼저 이 함수를 사용하여 파일이 있는
지를 먼저 확인해 보아야 한다. 다음 예는 파일의 존재 여부
를 점검해 본 후 파일을 삭제한다.
if FileExists(FileName) then
DeleteFile(FileName);
FileGetAttr SysUtils Unit
문법 : function FileGetAttr(const FileName: string): Integer;
파일의 속성을 조사한다. 조사되는 파일의 속성은 다음과 같
다. 속성을 나타내는 이 상수들과 FileGetAttr이 리턴하는 값
을 AND 연산시켜 특정 속성의 유무를 조사한다. 속성 변경
에 실패하면 음수의 에러 코드를 리턴한다.
상수 값 의미
faReadOnly $01 읽기전용
faHidden $02 숨은 파일
faSysFile $04 시스템 파일
faVolumeID $08 디스크 볼륨
faDirectory $10 디렉토리
faArchive $20 기록 속성
faAnyFile $3F 모든 파일
FileGetDate SysUtils Unit
문법 : function FileGetDate(Handle: Integer): Longint;
파일이 처음 생성된, 또는 최후 수정된 날짜와 시간을 구한
다. 이 날짜는 도스의 dir 명령시 나타나는 날짜이며 도스 고
유의 포맷을 사용하므로 델파이에서 이 날짜 정보를 사용하
려면 FileDataToDateTime 등의 포맷 변환 함수를 사용해야 한다.
FileOpen SysUtils Unit
문법 : function FileOpen(const FileName: string; Mode:
Word): Integer;
델파이가 사용하는 내부적인 함수이므로 사용자가 직접 사
용하는 경우는 드물다. 파일을 오픈할 때는 델파이가 제공하
는 Reset, Rewrite, Append 등의 프로시저를 사용한다.
FilePos system Unit
문법 : function FilePos(var F):Longint;
파일의 현재 위치(FP)를 구한다. 이 함수는 텍스트 파일에는
사용할 수 없으며 파일이 열려 있어야 한다.
FileRead SysUtils Unit
문법 : function FileRead(Handle: Integer; var Buffer; Count:
Longint): Longint;
핸들이 지시하는 파일로부터 Count 바이트 분만큼을 버퍼로
읽어들인다. 파일로부터 실제 읽은 바이트 수가 리턴된다.
FileSearch SysUtils Unit
문법 : function FileSearch(const Name, DirList: string): string;
DirList에 주어진 디렉토리의 경로에 Name 파일이 있는지 조
사해준다. DirList는 도스의 PATH문에서와 같이 여러 개의 디
렉토리명을 세미콜론으로 끊어 기입한다. 파일을 찾을 경우
파일의 완전 경로를 리턴하며 파일을 찾지 못할 경우 널 스트
링을 리턴한다.
FileSeek SysUtils Unit
문법 : function FileSeek(Handle: Integer; Offset: Longint;
Origin: Integer): Longint;
파일의 현재 위치(FP)를 특정 위치로 옮긴다. 옮겨지는 위치
는 Origin이 정하는 기준에서 Offset바이트만큼 떨어진 위치
이다. Origin의 값은 다음과 같다.
Origin 의미
0 파일의 처음을 기준으로 한다.
1 파일의 현재 위치를 기준으로 한다.
2 파일의 끝을 기준으로 한다.
FileSetAttr SysUtils Unit
문법 : function FileSetAttr(const FileName: string; Attr:
Integer): Integer;
파일의 속성을 설정한다. 설정할 수 있는 속성에는 다음과 같
은 종류가 있다. 여러 개의 속성을 동시에 설정하려면 속성
상수를 OR 연산으로 연결하여 사용한다. 속성 변경이 정상
적으로 수행되면 0을 리턴하며 에러 발생시 음수의 에러 코
드를 리턴한다.
상수 값 의미
faReadOnly $01 읽기 전용
faHidden $02 숨은 파일
faSysFile $04 시스템 파일
faVolumeID $08 디스크 볼륨
faDirectory $10 디렉토리
faArchive $20 기록 속성
faAnyFile $3F 모든 파일
FileSetDate SysUtils Unit
문법 : procedure FileSetDate(Handle: Integer; Age: Longint);
파일의 날짜를 변경한다. 이 날짜는 도스의 dir 명령시 나타나
는 날짜이며 도스 고유의 포맷을 사용한다.
FileSize SysUtils Unit
문법 : function FileSize(var F);Longint;
파일 핸들 F가 지정하는 파일의 크기를 바이트 단위로 조사
한다. 단 F가 레코드 파일일 경우는 레코드의 개수를 조사한다.
FindClose SysUtils Unit
문법 : procedure FindClose(var SearchRec: TSearchRec);
FindFirst, FindNext 함수를 사용한 파일 검색을 종료한다. 굳
이 파일 검색 작업을 종료해 주어야 할 필요는 없으며 실제로
16비트 버전의 윈도우즈에서 이 함수는 아무런 일도 하지 않
는다. 하지만 32비트 버전에서는 반드시 검색 종료를 해 주어
야 하므로 호환성을 위해 검색 후 종료해 주는 것이 좋다.
FindFirst SysUtils Unit
문법 : function FindFirst(const Path: string; Attr: Word; var F:
TSearchRec): Integer;
주어진 검색 조건과 파일의 속성을 사용하여 첫 번째 일치하
는 파일을 검색해 낸다. Path는 검색하고자 하는 디렉토리와
파일의 조건이며 와일드 카드식으로 표현된다. 예를 들어
'c:\windows\*.exe'는 windows 디렉토리의 확장자가 EXE인 첫
번째 파일을 검색한다. Attr인수는 검색 대상이 되는 파일의
속성을 지정하며 다음과 같은 속성 상수를 사용한다.
상수 값 의미
faReadOnly $01 읽기 전용
faHidden $02 숨은 파일
faSysFile $04 시스템 파일
faVolumeID $08 디스크 볼륨
faDirectory $10 디렉토리
faArchive $20 기록 속성
faAnyFile $3F 모든 속성
여러 가지 속성을 사용할 경우 or 연산자로 속성을 연결한다.
예를 들어 읽기 전용이면서 숨은 파일을 검색하고 싶다면
(faReadOnly + faHidden)과 같이 Attr 인수를 설정한다. 검색한
결과는 TSearchRec 레코드형의 F변수에 저장되며 다음과 같
은 정보를 가지고 있다.
TSearchRec = record
Fill: array[1..21] of Byte;
Attr: Byte;
Time: Longint;
Size: Longint;
Name: string[12]; {파일 이름}
end;
이 정보는 FindNext 함수에 의해 다시 사용되며 계속 검색을
수행한다.
FindNext SysUtils Unit
문법 : function FindNext(var F: TSearchRec): Integer;
FindFirst에 이어 계속 검색을 수행한다. FindFirst가 첫 번째 검
색한 결과를 저장한 F를 다시 인수로 넘겨주면 계속해서 일
치하는 조건을 가진 파일을 검색해 내며 검색의 결과는 역시
F로 저장된다. 검색이 계속 이루어지고 있다면 0을 리턴하며
검색 중 에러가 발생했거나 더 이상 조건이 일치하는 파일이
없으면 음수의 에러 코드를 리턴한다. FindFirst와 FindNext는
조건에 맞는 모든 파일을 검색해 낼 때 사용한다.
Flush system Unit
문법 : procedure Flush(var F:Text);
출력용으로 오픈된 텍스트 파일의 버퍼를 비운다. 버퍼를 비
운다는 말은 파일로 출력되기 위해 버퍼에 대기하고 있던 데
이터를 외부 파일로 강제 전송한다는 뜻이다. 입력용으로 열
려진 파일에는 아무런 동작도 하지 않는다.
ForceDirectories FileCtrl Unit
문법 : procedure ForceDirectories(Dir: string);
완전 경로를 주면 경로에 이르는 모든 디렉토리를 생성한다.
일반적으로 디렉토리는 한 번에 하나만 만들 수 있지만 이 함
수를 쓰면 여러 개의 디렉토리를 한꺼번에 만들 수 있다. 예
를 들어 C;\a\b\c 디렉토리를 만들고자 할 경우 MkDir을 사용
하면 a부터 만들고 b를 만든 후 c를 만들어야 하며 한꺼번에
세 개의 디렉토리를 만들 수 없다. 이 프로시저를 사용하면
한꺼번에 디렉토리를 생성할 수 있으므로 만들고자 하는 디
렉토리의 완전 경로만 입력해 주면 된다. 다음 예는 C드라이
브에 한꺼번에 12개의 디렉토리를 계층적으로 생성한다.
ForceDirectories('c:\a\b\c\d\e\f\g\h\i\j\k\l');
GetDir system Unit
문법 : procedure GetDir(D:Byte;var S:String);
지정한 드라이브의 현재 디렉토리를 조사한다. D로 드라이
브의 번호를 지정하면 현재 디렉토리가 문자열 S에 대입된
다. 드라이브 번호 D는 0일 경우, 디폴트 드라이브 1일 경우
A, 2일 경우 B 등과 같이 지정한다. 이 프로시저는 일체의 에
러 체크를 하지 않는다. 만약 드라이브 번호로 주어진 D가 존
재하지 않을 경우 조사되는 디렉토리는 X:\가 된다. 다음 예
는 현재 드라이브의 디렉토리를 조사하여 레이블에 출력한다.
var
dir:string;
begin
GetDir(0,dir);
label1.caption:=dir;
end;
MkDir system Unit
문법 : procedure MkDir(S:String);
새로운 서브 디렉토리를 생성한다. 문자열 S에 생성하고자하
는 서브 디렉토리의 경로를 준다. 디렉토리를 생성하는 규칙
은 도스에서와 동일하다. 즉 같은 이름의 디렉토리나 파일이
있어서는 안된다.
Readln system Unit
문법 : procedure Readln ( [var F;Text; ] V1 [,V2,...Vn]);
파일로부터 문장 한 줄을 읽어 변수 V1이하에 대입하며 다음
문장으로 이동한다. Readln(F)와 같이 읽어들일 변수를 지정
하지 않으면 다음 줄로 이동하기만 한다. 파일 변수가 생략될
경우는 표준 입력 장치인 키보드로부터 문자열을 입력 받아
V1이하의 변수에 대입한다. 인수없이 Readln만 사용되면
Enter 키가 입력될 때까지 대기한다. 다음 예제는 키보드로부
터 문장을 입력받아 다시 레이블로 출력한다.
s : String;
Write('문장을 입력하시요: ');
Readln(s);
label1.caption:=s;
end;
Rename system Unit
문법 : procedure Rename(var F:Newname);
파일의 이름을 변경한다. 변경하고자 하는 이름을 문자열로
전달해 주면 된다. 파일명을 변경하려면 AssignFile 함수로 파
일 핸들에 외부 파일명을 할당해 주고 이 함수를 호출하면 된
다. 파일을 오픈할 필요는 없다.
Reset system Unit
문법 : procedure Reset(var F [:File;RecSize:Word]);
파일을 읽기 전용으로 오픈한다. F는 AssignFile 함수로 외부
파일과 연결된 파일 핸들이며 RecSize는 F가 untyped 파일일
경우 한 번에 읽을 레코드의 크기를 지정한다. RecSize가 생
략될 경우 이 값은 128바이트로 간주된다. 외부 파일이 존재
하지 않을 경우는 에러가 발생하며 파일이 이미 열려져 있는
상태이면 파일을 닫은 후에 다시 오픈한다. 이 함수로 파일을
오픈한 후에 Readln 등의 함수로 파일로부터 데이터를 읽는다.
Rewrite system Unit
문법 : procedure Rewrite(var F;File [;Recsize:Word]);
파일을 쓰기 전용으로 오픈한다. F는 AssignFile 함수로 외부
파일과 연결된 파일 핸들이며 RecSize는 F가 untyped 파일일
경우 한번에 출력할 레코드의 크기를 지정한다. RecSize가 생
략될 경우 이 값은 128바이트로 간주된다. 파일이 없을 경우
에는 파일을 생성하고 파일이 이미 존재할 경우는 원래의 파
일을 지운 후 다시 만든다. 파일이 이미 열려져 있으면 파일
을 닫은 후에 다시 생성하며 파일 위치(FP)는 파일의 선두에
맞추어진다. 이 함수로 파일을 오픈한 후에 Writeln 등의 함수
로 데이터를 파일로 출력한다. 다음 예는 test.txt라는 간단한
파일을 만든 후 문자열 하나를 출력한다.
var
F:TextFile
begin
AssignFile(F, 'test.txt');
Rewrite(F);
Writeln(F, '출력할 내용');
CloseFile(F);
end;
파일 입출력이 끝난 후에 파일 핸들은 반드시 CloseFile 프로
시저로 닫아 주어야 한다.
RmDir system Unit
문법 : procedure RmDir(S: String);
서브 디렉토리를 삭제한다. 삭제할 디렉토리명을 문자열로
넘겨준다. 도스의 RM 명령과 거의 동일한 규칙을 사용하며
디렉토리가 비어있지 않은 경우, 현재 디렉토리인 경우, 루트
디렉토리인 경우는 디렉토리를 삭제할 수 없다.
Seek system Unit
문법 : procedure Seek(var F;N:Longint);
파일의 현재 위치(FP)를 N위치로 옮긴다. untyped 파일일 경
우 N의 의미는 파일 선두에서의 바이트 단위 거리이지만
typed 파일일 경우 N은 N번째 요소의 위치를 의미한다. 예를
들어 레코드형 파일일 경우 N이 5이면 여섯 번째 레코드의
위치로 이동한다. 첫 번째 레코드의 번호가 0번이다. Seek(F,
FileSize(F))는 파일의 끝으로 현재 위치를 이동시킨다.
SeekEof system Unit
문법 : function SeekEof[(var F:Text)]:Boolean;
파일의 현재 위치가 끝(EOF)인지 점검한다.
SeekEoln system Unit
문법 : function SeekEoln[(var F:Text)]:Boolean;
파일의 현재 위치가 줄의 끝(EOL)인지 점검한다.
SelectDirectory FileCtrl Unit
문법 : function SelectDirectory(var Directory: string; Options:
TSelectDirOpts; HelpCtx: Longint): Boolean;
디렉토리 선택 대화상자를 보여주고 사용자로 하여금 디렉
토리를 선택하도록 한다. 드라이브 콤보 박스와 디렉토리 리
스트 박스를 사용하여 디렉토리를 선택하며 파일 리스트 박
스는 어떤 파일이 있는지만 보여준다. 디렉토리를 선택하는
것뿐만 아니라 에디트 박스에 디렉토리명을 입력하여 없는
디렉토리를 직접 생성할 수도 있다. 인수로 주어지는
Dierectory 문자열은 대화상자가 처음 열릴 때 선택될 디렉토
리이며 사용자가 대화상자에서 선택한 디렉토리명이 이 인
수로 리턴된다. 사용자가 OK 버튼을 누르면 True를 리턴하고
Cancel 버튼을 누르면 False를 리턴한다.
두 번째 인수 Options는 대화상자의 모양과 기능을 정의하는
옵션이며 다음과 같은 값의 집합형이다.
옵션 의미
[] 사용자는 존재하는 디렉토리를 선택할 수 있을 뿐이며 없는 디렉토리를 만들 수 없다.
sdAllowCreate
에디트 박스에 사용자가 직접 존재하지 않는디렉토리를 입력하는 것을 허용한다. 그러나
이 옵션을 사용한다고 해서 디렉토리를 생성해 주는 것은 아니며 사용자가 직접
Directory 인수를 참조하여 생성해 주어야한다.
sdPerformCreate
이 옵션을 sdAllowCreate 옵션과 함께 사용할 경우 존재하지 않는 디렉토리가 입력되면
직접 디렉토리를 만들어 준다.
sdPrompt 디렉토리를 새로 만들기 전에 사용자로부터디렉토리를 정말로 만들 것인가를 물어본다.
위의 두 옵션이 선택되었을 때만 의미가 있는 옵션이다.
다음 예는 이 함수를 사용하는 간단한 예제이다.
var
Dir: string;
begin
Dir := 'C:\DELPHI';
if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0)
then
Label1.Caption := Dir;
end;
SetTextBuf system Unit
문법 : procedure SetTextBuf(var F:Text;var Buf [;Size:Word]);
텍스트 파일의 입출력에 사용될 버퍼를 지정한다. 디폴트로
주어진 128바이트의 버퍼는 대부분의 경우는 충분하지만 입
출력이 잦을 경우 버퍼를 늘려주면 속도를 조금 더 향상시킬
수 있다. 텍스트 파일 F가 사용하는 버퍼를 내부 버퍼를 사용
하지 않고 Buf로 변경하며 Size 인수는 Buf의 크기를 지정한
다. Size가 생략될 경우 이 값은 SizeOf(Buf)가 되며 이는 Buf가
가진 모든 버퍼를 다 사용한다는 뜻이다. 이 함수는 Reset,
Rewrite 등의 오픈 함수가 호출된 직후에 사용한다. 그러나 일
단 입출력을 수행한 파일에는 이 함수를 사용하여 버퍼를 변
경하지 않는 것이 좋다. 왜냐하면 버퍼를 변경하면 기존 버퍼
에 있던 내용을 잃어버리기 때문이다.
Truncate system Unit
문법 : procedure Truncate(var F);
현재 파일 위치 이후의 모든 레코드를 잘라 버리며 파일 위치
는 EOF가 된다. 텍스트 파일에서는 이 프로시저를 사용할 수
없다.
Write system Unit
문법 : 텍스트 파일 : procedure Write( [ var F: Text; ] P1
[,P2,...,Pn ] );
타입드 파일 : procedure Write(F, V1 [V2,...Vn]);
변수값을 파일로 출력한다. F는 출력용으로 오픈된 텍스트
파일이어야 하며 파일이 생략될 경우 표준 출력 장치인 화면
으로 출력된다. 파일 변수 다음의 인수 P1이하는 파일로 실제
출력될 값들이며 이 값에 필드 폭, 정밀도를 지정할 수 있다.
출력할 수 있는 타입은 문자형, 정수형, 실수형, 문자열, 진위
형 등이 있다.
타입드 파일일 경우 출력되는 변수 V1이하는 파일의 요소와
같은 형이어야 한다. 즉 레코드형 파일이라면 출력되는 값도
같은 형의 레코드이어야 한다. 파일의 현재 위치가 파일의 끝
이라면 파일의 크기는 출력된 데이터의 길이만큼 늘어난다.
Writeln system Unit
문법 : procedure Writeln([ var F: Text; ] P1 [, P2, ...,Pn ] );
Write 함수의 기능을 확장한 함수이다. Write를 호출하여 변
수를 파일로 출력하되 변수 값 다음에 EOL을 출력하여 자동
으로 개행되도록 한다.
문법 : procedure Append(var f:Text);
파일을 추가 기록용으로 오픈한다. 파일 변수 F는 Assign으로
외부 파일과 연결되어 있어야 한다. 외부 파일이 없으면 에러
가 발생하며 이미 열려 있는 경우는 파일을 닫은 후 다시 연
다. 파일을 오픈한 후 FP는 파일 끝(EOF)에 위치시키므로 추
가적인 데이터를 파일 끝에 추가할 수 있다. 다음 예는 루트
디렉토리의 AUTOEXEC.BAT 파일 끝에 PROMPT문을 추가
한다.
var
F: TextFile;
begin
AssignFile(F, 'c:\autoexec.bat');
Append(F); { 파일 오픈 }
Writeln(F, 'prompt $p$g');
CloseFile(F); { 파일 닫음 }
end;
end.
AssignCrt WinCrt Unit
문법 : procedure AssignCrt(var f:Text);
텍스트 파일 변수를 CRT 윈도우와 연결한다. CRT와 연결된
텍스트 파일은 텍스트 환경의 화면을 에뮬레이션하며 이 파
일로 문자열을 출력하면 CRT 화면으로 문자열이 출력된다.
표준 입출력 명령보다 텍스트 파일을 사용하여 CRT로 입출
력하는 것이 속도가 조금 더 빠르다. 다음 예는 SF라는 텍스
트 파일을 CRT로 연결하여 문자열을 출력한다.
var
SF:TextFile;
begin
AssignCRT(SF);
Rewrite(SF);
Writeln(SF,'Screen File');
CloseFile(SF);
end;
AssignFile system Unit
문법 : procedure AssignFile(var f,String);
텍스트 파일 변수와 외부 파일을 연결한다. 즉 파일 핸들에
파일을 할당한다. 일단 파일과 핸들이 연결되면 핸들에 대한
모든 조작은 파일로 입출력된다. 이 프로시저로 핸들에 파일
을 할당한 후 Reset이나 Rewrite 등을 사용하여 파일을 오픈하
며 WriteLn이나 Readln으로 파일 입출력을 수행한다. 파일 이
름은 문자열 형태로 전달하되 필요할 경우 드라이브명과 디
렉토리명을 사용할 수 있다. 주의할 것은 이미 열려져 있는
파일 핸들을 재할당해서는 안된다는 점이다. 다음 예는
test.txt 파일에서 첫 줄을 읽어 에디트 박스로 출력한다.
var
F: TextFile;
S: String;
begin
AssignFile(F, 'test.txt');
Reset(F);
Readln(F, S);
Edit1.Text := S;
CloseFile(F);
end.
BlockRead system Unit
문법 : procedure BlockRead(var f:File; var Buf; Count:Word
[;var Result: Word]);
파일로부터 한 개 또는 다수 개의 레코드를 Buf 메모리 영역
으로 읽어들인다. F는 언타입드 파일 변수이며 Buf는 어떤 형
의 변수든지 상관없다. 읽혀지는 레코드의 개수는 Count인수
로 설정하며 실제로 읽혀진 레코드 수는 Result 인수로 리턴
된다. 파일로부터 읽혀진 레코드는 Buf 변수가 차지하고 있
는 메모리의 시작 위치에 기록된다. 리턴값인 Result가 Count
인수와 같은 값을 가지면 요구한 레코드가 전부 읽혀진 것이
며 Result가 Count보다 더 작은 값을 가지면 파일을 읽는 중에
EOF를 만난 것이다.
BlockWrite system Unit
문법 : procedure BlockWrite(var f:File; var Buf; Count:Word
[;var Result: Word]);
파일로 한 개 또는 다수 개의 레코드를 출력한다. F는 언타입
드 파일 변수이며 Buf는 어떤 형의 변수든지 상관없다. 파일
로 출력되는 레코드의 개수는 Count 인수로 설정하며 실제로
출력된 레코드 수는 Result 인수로 리턴된다. 파일로 출력되
는 레코드는 Buf 변수가 차지하고 있는 메모리의 시작 위치
에 있어야 한다. 리턴값인 Reulst가 Count 인수와 같은 값을 가
지면 요구한 레코드가 이상없이 출력된 것이며 Result가
Count보다 더 작은 값을 가지면 디스크의 용량이 부족하여
레코드를 모두 출력하지 못한 것이다.
ChangeFileExt system Unit
문법 : function ChangeFileExt(const FileName, Extension:
string):string;
첫 번째 인수 FileName으로 주어진 파일의 이름 중 파일의 확
장자만 두 번째 인수 Extension으로 변경한다. 다음 예는 인수
로 주어진 파일의 확장자를 무조건 INI로 변경한다.
ChangeFileExt(ParamStr(0), '.INI');
Chdir system Unit
문법 : procedure ChDir(S: String);
인수 S가 지정하는 경로로 현재 디렉토리를 변경한다. 만약 S
가 드라이브 문자를 포함하고 있을 경우 현재 드라이브도 변
경된다.
Close system Unit
문법 : procedure Close(var F);
파일 핸들과 외부 파일과의 연결을 끊고 파일 핸들을 닫는다.
이 함수는 구 버전의 볼랜드 파스칼 컴파일러와의 호환성을
위해 제공되며 델파이에서는 사용되지 않는다. 델파이에서
는 핸들을 닫는 CloseFile이라는 별도의 함수를 제공하므로
이 함수를 사용하도록 한다.
CloseFile system Unit
문법 : procedure CloseFile(var F);
파일 핸들과 외부 파일과의 연결을 끊고 파일 핸들을 닫는다.
파일 변수 F는 Reset, Rewrite, Append 등에 의하여 오픈된 파
일 핸들이며 파일 핸들은 사용 후에 반드시 닫아주어야 한다.
DirectoryExists FileCtrl Unit
문법 : function DirectoryExists(Name: string): Boolean;
인수로 전달된 디렉토리가 존재하는지 검사하며 존재할 경
우 True를 리턴하고 존재하지 않을 경우 False를 리턴한다.
DiskFree SysUtils Unit
문법 : function DiskFree(Drive: Byte): Longint;
인수로 지정한 Drive에 사용 가능한 용량을 조사해준다. 드라
이브 번호는 0이 현재 드라이브, 1이 A, 2가 B 등이다. 드라이
브 번호가 잘못되었을 경우는 -1을 리턴한다.
DiskSize SysUtils Unit
문법 : function DiskSize(Drive: Byte): Longint;
인수로 지정한 Drive의 총 용량을 조사해준다. 드라이브 번호
는 0이 현재 드라이브, 1이 A, 2가 B 등이다. 드라이브 번호가
잘못되었을 경우는 -1을 리턴한다.
Eof system Unit
문법 : function Eof [ (var F:Text) ]:Boolean;
파일 변수 F의 현재 위치(FP)가 파일의 끝일 경우 True를 리턴
한다. 다음 예제는 input.dat파일을 output.dat파일로 복사한다.
두 파일을 열어놓고 입력 파일에서 읽어 출력 파일로 쓰기를
입력파일의 끝까지 반복한다. 이 때 입력 파일의 끝인가를 점
검하기 위해 Eof 함수가 사용되었다. 파일의 처음부터 끝까
지 한 바이트씩 순서대로 작업을 해야할 경우에 사용한다.
var
F1, F2: TextFile;
Ch: Char;
begin
AssignFile(F1, 'input.dat');
Reset(F1);
AssignFile(F2, 'output.dat');
Rewrite(F2);
while not Eof(F1) do
begin
Read(F1, Ch);
Write(F2, Ch);
end;
CloseFile(F2);
CloseFile(F1);
end.
Eoln system Unit
문법 : function Eoln [ {var F:Text) ]:Boolean;
파일 변수 F의 현재 위치(FP)가 한 줄의 끝인지를 점검하고
줄끝일 경우 True를 리턴한다. 한 줄씩 처리하고자 할 때 이
함수를 사용한다.
Erase system Unit
문법 : procedure Erase(var F);
외부 파일을 삭제한다. DeleteFile은 파일명으로 삭제하는 반
면 이 프로시저는 파일 핸들로 파일을 삭제한다. 파일을 삭제
한 후 파일 핸들은 자동으로 닫혀진다.
ExpandFileName SysUtils Unit
문법 : function ExpandFileName(const FileName: string):
string;
파일 이름에 드라이브명과 디렉토리명을 붙여 완전 경로(full
path)를 만들어낸다. 덧붙여지는 경로는 현재 드라이브와 현
재 디렉토리이다.
ExtractFileExt SysUtils Unit
문법 : function ExtractFileExt(const FileName string): string;
완전 경로에서 파일의 확장자만 분리시킨다. 특정 파일의 확
장자를 알고자 할 때 이 함수를 사용하여 확장자만 분리한 후
문자열 비교를 수행하면 된다.
ExtractFileName SysUtils Unit
문법 : function ExtractFileName(const FileName: string):
string;
완전 경로에서 파일 이름만 분리해 낸다. 파일의 확장자도 같
이 분리된다. 즉 완전 경로에서 드라이브명과 디렉토리 명이
제외된다.
ExtractFilePath SysUtils Unit
문법 : function ExtractFilePath(const FileName: string):
string;
완전 경로에서 파일 이름을 제외하고 드라이브명과 디렉토
리명만 분리해 낸다. 다음 예는 완전 경로를 가진 FileName으
로부터 경로만 분리해낸 후 파일이 있는 디렉토리로 이동한다.
ChDir(ExtractFilePath(FileName));
FileAge SysUtils Unit
문법 : function FileAge(const FileName: string): Longint;
파일의 날짜와 시간을 구해낸다.
FileClose SysUtils Unit
문법 : procedure FileClose(Handle: Integer);
파일 핸들을 닫는다. 파일 입출력을 위해 파일 변수에 외부
파일을 연결한 경우 핸들을 다 사용한 후에 반드시 파일 핸들
을 닫아 주어야 한다.
FileExists SysUtils Unit
문법 : function FileExists(const FileName: string): Boolean;
파일이 디스크 상에 존재하는지를 조사하며 파일이 없을 경
우 False를 리턴한다. 존재하지 않는 파일을 사용하고자 할 경
우 예외가 발생하므로 먼저 이 함수를 사용하여 파일이 있는
지를 먼저 확인해 보아야 한다. 다음 예는 파일의 존재 여부
를 점검해 본 후 파일을 삭제한다.
if FileExists(FileName) then
DeleteFile(FileName);
FileGetAttr SysUtils Unit
문법 : function FileGetAttr(const FileName: string): Integer;
파일의 속성을 조사한다. 조사되는 파일의 속성은 다음과 같
다. 속성을 나타내는 이 상수들과 FileGetAttr이 리턴하는 값
을 AND 연산시켜 특정 속성의 유무를 조사한다. 속성 변경
에 실패하면 음수의 에러 코드를 리턴한다.
상수 값 의미
faReadOnly $01 읽기전용
faHidden $02 숨은 파일
faSysFile $04 시스템 파일
faVolumeID $08 디스크 볼륨
faDirectory $10 디렉토리
faArchive $20 기록 속성
faAnyFile $3F 모든 파일
FileGetDate SysUtils Unit
문법 : function FileGetDate(Handle: Integer): Longint;
파일이 처음 생성된, 또는 최후 수정된 날짜와 시간을 구한
다. 이 날짜는 도스의 dir 명령시 나타나는 날짜이며 도스 고
유의 포맷을 사용하므로 델파이에서 이 날짜 정보를 사용하
려면 FileDataToDateTime 등의 포맷 변환 함수를 사용해야 한다.
FileOpen SysUtils Unit
문법 : function FileOpen(const FileName: string; Mode:
Word): Integer;
델파이가 사용하는 내부적인 함수이므로 사용자가 직접 사
용하는 경우는 드물다. 파일을 오픈할 때는 델파이가 제공하
는 Reset, Rewrite, Append 등의 프로시저를 사용한다.
FilePos system Unit
문법 : function FilePos(var F):Longint;
파일의 현재 위치(FP)를 구한다. 이 함수는 텍스트 파일에는
사용할 수 없으며 파일이 열려 있어야 한다.
FileRead SysUtils Unit
문법 : function FileRead(Handle: Integer; var Buffer; Count:
Longint): Longint;
핸들이 지시하는 파일로부터 Count 바이트 분만큼을 버퍼로
읽어들인다. 파일로부터 실제 읽은 바이트 수가 리턴된다.
FileSearch SysUtils Unit
문법 : function FileSearch(const Name, DirList: string): string;
DirList에 주어진 디렉토리의 경로에 Name 파일이 있는지 조
사해준다. DirList는 도스의 PATH문에서와 같이 여러 개의 디
렉토리명을 세미콜론으로 끊어 기입한다. 파일을 찾을 경우
파일의 완전 경로를 리턴하며 파일을 찾지 못할 경우 널 스트
링을 리턴한다.
FileSeek SysUtils Unit
문법 : function FileSeek(Handle: Integer; Offset: Longint;
Origin: Integer): Longint;
파일의 현재 위치(FP)를 특정 위치로 옮긴다. 옮겨지는 위치
는 Origin이 정하는 기준에서 Offset바이트만큼 떨어진 위치
이다. Origin의 값은 다음과 같다.
Origin 의미
0 파일의 처음을 기준으로 한다.
1 파일의 현재 위치를 기준으로 한다.
2 파일의 끝을 기준으로 한다.
FileSetAttr SysUtils Unit
문법 : function FileSetAttr(const FileName: string; Attr:
Integer): Integer;
파일의 속성을 설정한다. 설정할 수 있는 속성에는 다음과 같
은 종류가 있다. 여러 개의 속성을 동시에 설정하려면 속성
상수를 OR 연산으로 연결하여 사용한다. 속성 변경이 정상
적으로 수행되면 0을 리턴하며 에러 발생시 음수의 에러 코
드를 리턴한다.
상수 값 의미
faReadOnly $01 읽기 전용
faHidden $02 숨은 파일
faSysFile $04 시스템 파일
faVolumeID $08 디스크 볼륨
faDirectory $10 디렉토리
faArchive $20 기록 속성
faAnyFile $3F 모든 파일
FileSetDate SysUtils Unit
문법 : procedure FileSetDate(Handle: Integer; Age: Longint);
파일의 날짜를 변경한다. 이 날짜는 도스의 dir 명령시 나타나
는 날짜이며 도스 고유의 포맷을 사용한다.
FileSize SysUtils Unit
문법 : function FileSize(var F);Longint;
파일 핸들 F가 지정하는 파일의 크기를 바이트 단위로 조사
한다. 단 F가 레코드 파일일 경우는 레코드의 개수를 조사한다.
FindClose SysUtils Unit
문법 : procedure FindClose(var SearchRec: TSearchRec);
FindFirst, FindNext 함수를 사용한 파일 검색을 종료한다. 굳
이 파일 검색 작업을 종료해 주어야 할 필요는 없으며 실제로
16비트 버전의 윈도우즈에서 이 함수는 아무런 일도 하지 않
는다. 하지만 32비트 버전에서는 반드시 검색 종료를 해 주어
야 하므로 호환성을 위해 검색 후 종료해 주는 것이 좋다.
FindFirst SysUtils Unit
문법 : function FindFirst(const Path: string; Attr: Word; var F:
TSearchRec): Integer;
주어진 검색 조건과 파일의 속성을 사용하여 첫 번째 일치하
는 파일을 검색해 낸다. Path는 검색하고자 하는 디렉토리와
파일의 조건이며 와일드 카드식으로 표현된다. 예를 들어
'c:\windows\*.exe'는 windows 디렉토리의 확장자가 EXE인 첫
번째 파일을 검색한다. Attr인수는 검색 대상이 되는 파일의
속성을 지정하며 다음과 같은 속성 상수를 사용한다.
상수 값 의미
faReadOnly $01 읽기 전용
faHidden $02 숨은 파일
faSysFile $04 시스템 파일
faVolumeID $08 디스크 볼륨
faDirectory $10 디렉토리
faArchive $20 기록 속성
faAnyFile $3F 모든 속성
여러 가지 속성을 사용할 경우 or 연산자로 속성을 연결한다.
예를 들어 읽기 전용이면서 숨은 파일을 검색하고 싶다면
(faReadOnly + faHidden)과 같이 Attr 인수를 설정한다. 검색한
결과는 TSearchRec 레코드형의 F변수에 저장되며 다음과 같
은 정보를 가지고 있다.
TSearchRec = record
Fill: array[1..21] of Byte;
Attr: Byte;
Time: Longint;
Size: Longint;
Name: string[12]; {파일 이름}
end;
이 정보는 FindNext 함수에 의해 다시 사용되며 계속 검색을
수행한다.
FindNext SysUtils Unit
문법 : function FindNext(var F: TSearchRec): Integer;
FindFirst에 이어 계속 검색을 수행한다. FindFirst가 첫 번째 검
색한 결과를 저장한 F를 다시 인수로 넘겨주면 계속해서 일
치하는 조건을 가진 파일을 검색해 내며 검색의 결과는 역시
F로 저장된다. 검색이 계속 이루어지고 있다면 0을 리턴하며
검색 중 에러가 발생했거나 더 이상 조건이 일치하는 파일이
없으면 음수의 에러 코드를 리턴한다. FindFirst와 FindNext는
조건에 맞는 모든 파일을 검색해 낼 때 사용한다.
Flush system Unit
문법 : procedure Flush(var F:Text);
출력용으로 오픈된 텍스트 파일의 버퍼를 비운다. 버퍼를 비
운다는 말은 파일로 출력되기 위해 버퍼에 대기하고 있던 데
이터를 외부 파일로 강제 전송한다는 뜻이다. 입력용으로 열
려진 파일에는 아무런 동작도 하지 않는다.
ForceDirectories FileCtrl Unit
문법 : procedure ForceDirectories(Dir: string);
완전 경로를 주면 경로에 이르는 모든 디렉토리를 생성한다.
일반적으로 디렉토리는 한 번에 하나만 만들 수 있지만 이 함
수를 쓰면 여러 개의 디렉토리를 한꺼번에 만들 수 있다. 예
를 들어 C;\a\b\c 디렉토리를 만들고자 할 경우 MkDir을 사용
하면 a부터 만들고 b를 만든 후 c를 만들어야 하며 한꺼번에
세 개의 디렉토리를 만들 수 없다. 이 프로시저를 사용하면
한꺼번에 디렉토리를 생성할 수 있으므로 만들고자 하는 디
렉토리의 완전 경로만 입력해 주면 된다. 다음 예는 C드라이
브에 한꺼번에 12개의 디렉토리를 계층적으로 생성한다.
ForceDirectories('c:\a\b\c\d\e\f\g\h\i\j\k\l');
GetDir system Unit
문법 : procedure GetDir(D:Byte;var S:String);
지정한 드라이브의 현재 디렉토리를 조사한다. D로 드라이
브의 번호를 지정하면 현재 디렉토리가 문자열 S에 대입된
다. 드라이브 번호 D는 0일 경우, 디폴트 드라이브 1일 경우
A, 2일 경우 B 등과 같이 지정한다. 이 프로시저는 일체의 에
러 체크를 하지 않는다. 만약 드라이브 번호로 주어진 D가 존
재하지 않을 경우 조사되는 디렉토리는 X:\가 된다. 다음 예
는 현재 드라이브의 디렉토리를 조사하여 레이블에 출력한다.
var
dir:string;
begin
GetDir(0,dir);
label1.caption:=dir;
end;
MkDir system Unit
문법 : procedure MkDir(S:String);
새로운 서브 디렉토리를 생성한다. 문자열 S에 생성하고자하
는 서브 디렉토리의 경로를 준다. 디렉토리를 생성하는 규칙
은 도스에서와 동일하다. 즉 같은 이름의 디렉토리나 파일이
있어서는 안된다.
Readln system Unit
문법 : procedure Readln ( [var F;Text; ] V1 [,V2,...Vn]);
파일로부터 문장 한 줄을 읽어 변수 V1이하에 대입하며 다음
문장으로 이동한다. Readln(F)와 같이 읽어들일 변수를 지정
하지 않으면 다음 줄로 이동하기만 한다. 파일 변수가 생략될
경우는 표준 입력 장치인 키보드로부터 문자열을 입력 받아
V1이하의 변수에 대입한다. 인수없이 Readln만 사용되면
Enter 키가 입력될 때까지 대기한다. 다음 예제는 키보드로부
터 문장을 입력받아 다시 레이블로 출력한다.
s : String;
Write('문장을 입력하시요: ');
Readln(s);
label1.caption:=s;
end;
Rename system Unit
문법 : procedure Rename(var F:Newname);
파일의 이름을 변경한다. 변경하고자 하는 이름을 문자열로
전달해 주면 된다. 파일명을 변경하려면 AssignFile 함수로 파
일 핸들에 외부 파일명을 할당해 주고 이 함수를 호출하면 된
다. 파일을 오픈할 필요는 없다.
Reset system Unit
문법 : procedure Reset(var F [:File;RecSize:Word]);
파일을 읽기 전용으로 오픈한다. F는 AssignFile 함수로 외부
파일과 연결된 파일 핸들이며 RecSize는 F가 untyped 파일일
경우 한 번에 읽을 레코드의 크기를 지정한다. RecSize가 생
략될 경우 이 값은 128바이트로 간주된다. 외부 파일이 존재
하지 않을 경우는 에러가 발생하며 파일이 이미 열려져 있는
상태이면 파일을 닫은 후에 다시 오픈한다. 이 함수로 파일을
오픈한 후에 Readln 등의 함수로 파일로부터 데이터를 읽는다.
Rewrite system Unit
문법 : procedure Rewrite(var F;File [;Recsize:Word]);
파일을 쓰기 전용으로 오픈한다. F는 AssignFile 함수로 외부
파일과 연결된 파일 핸들이며 RecSize는 F가 untyped 파일일
경우 한번에 출력할 레코드의 크기를 지정한다. RecSize가 생
략될 경우 이 값은 128바이트로 간주된다. 파일이 없을 경우
에는 파일을 생성하고 파일이 이미 존재할 경우는 원래의 파
일을 지운 후 다시 만든다. 파일이 이미 열려져 있으면 파일
을 닫은 후에 다시 생성하며 파일 위치(FP)는 파일의 선두에
맞추어진다. 이 함수로 파일을 오픈한 후에 Writeln 등의 함수
로 데이터를 파일로 출력한다. 다음 예는 test.txt라는 간단한
파일을 만든 후 문자열 하나를 출력한다.
var
F:TextFile
begin
AssignFile(F, 'test.txt');
Rewrite(F);
Writeln(F, '출력할 내용');
CloseFile(F);
end;
파일 입출력이 끝난 후에 파일 핸들은 반드시 CloseFile 프로
시저로 닫아 주어야 한다.
RmDir system Unit
문법 : procedure RmDir(S: String);
서브 디렉토리를 삭제한다. 삭제할 디렉토리명을 문자열로
넘겨준다. 도스의 RM 명령과 거의 동일한 규칙을 사용하며
디렉토리가 비어있지 않은 경우, 현재 디렉토리인 경우, 루트
디렉토리인 경우는 디렉토리를 삭제할 수 없다.
Seek system Unit
문법 : procedure Seek(var F;N:Longint);
파일의 현재 위치(FP)를 N위치로 옮긴다. untyped 파일일 경
우 N의 의미는 파일 선두에서의 바이트 단위 거리이지만
typed 파일일 경우 N은 N번째 요소의 위치를 의미한다. 예를
들어 레코드형 파일일 경우 N이 5이면 여섯 번째 레코드의
위치로 이동한다. 첫 번째 레코드의 번호가 0번이다. Seek(F,
FileSize(F))는 파일의 끝으로 현재 위치를 이동시킨다.
SeekEof system Unit
문법 : function SeekEof[(var F:Text)]:Boolean;
파일의 현재 위치가 끝(EOF)인지 점검한다.
SeekEoln system Unit
문법 : function SeekEoln[(var F:Text)]:Boolean;
파일의 현재 위치가 줄의 끝(EOL)인지 점검한다.
SelectDirectory FileCtrl Unit
문법 : function SelectDirectory(var Directory: string; Options:
TSelectDirOpts; HelpCtx: Longint): Boolean;
디렉토리 선택 대화상자를 보여주고 사용자로 하여금 디렉
토리를 선택하도록 한다. 드라이브 콤보 박스와 디렉토리 리
스트 박스를 사용하여 디렉토리를 선택하며 파일 리스트 박
스는 어떤 파일이 있는지만 보여준다. 디렉토리를 선택하는
것뿐만 아니라 에디트 박스에 디렉토리명을 입력하여 없는
디렉토리를 직접 생성할 수도 있다. 인수로 주어지는
Dierectory 문자열은 대화상자가 처음 열릴 때 선택될 디렉토
리이며 사용자가 대화상자에서 선택한 디렉토리명이 이 인
수로 리턴된다. 사용자가 OK 버튼을 누르면 True를 리턴하고
Cancel 버튼을 누르면 False를 리턴한다.
두 번째 인수 Options는 대화상자의 모양과 기능을 정의하는
옵션이며 다음과 같은 값의 집합형이다.
옵션 의미
[] 사용자는 존재하는 디렉토리를 선택할 수 있을 뿐이며 없는 디렉토리를 만들 수 없다.
sdAllowCreate
에디트 박스에 사용자가 직접 존재하지 않는디렉토리를 입력하는 것을 허용한다. 그러나
이 옵션을 사용한다고 해서 디렉토리를 생성해 주는 것은 아니며 사용자가 직접
Directory 인수를 참조하여 생성해 주어야한다.
sdPerformCreate
이 옵션을 sdAllowCreate 옵션과 함께 사용할 경우 존재하지 않는 디렉토리가 입력되면
직접 디렉토리를 만들어 준다.
sdPrompt 디렉토리를 새로 만들기 전에 사용자로부터디렉토리를 정말로 만들 것인가를 물어본다.
위의 두 옵션이 선택되었을 때만 의미가 있는 옵션이다.
다음 예는 이 함수를 사용하는 간단한 예제이다.
var
Dir: string;
begin
Dir := 'C:\DELPHI';
if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0)
then
Label1.Caption := Dir;
end;
SetTextBuf system Unit
문법 : procedure SetTextBuf(var F:Text;var Buf [;Size:Word]);
텍스트 파일의 입출력에 사용될 버퍼를 지정한다. 디폴트로
주어진 128바이트의 버퍼는 대부분의 경우는 충분하지만 입
출력이 잦을 경우 버퍼를 늘려주면 속도를 조금 더 향상시킬
수 있다. 텍스트 파일 F가 사용하는 버퍼를 내부 버퍼를 사용
하지 않고 Buf로 변경하며 Size 인수는 Buf의 크기를 지정한
다. Size가 생략될 경우 이 값은 SizeOf(Buf)가 되며 이는 Buf가
가진 모든 버퍼를 다 사용한다는 뜻이다. 이 함수는 Reset,
Rewrite 등의 오픈 함수가 호출된 직후에 사용한다. 그러나 일
단 입출력을 수행한 파일에는 이 함수를 사용하여 버퍼를 변
경하지 않는 것이 좋다. 왜냐하면 버퍼를 변경하면 기존 버퍼
에 있던 내용을 잃어버리기 때문이다.
Truncate system Unit
문법 : procedure Truncate(var F);
현재 파일 위치 이후의 모든 레코드를 잘라 버리며 파일 위치
는 EOF가 된다. 텍스트 파일에서는 이 프로시저를 사용할 수
없다.
Write system Unit
문법 : 텍스트 파일 : procedure Write( [ var F: Text; ] P1
[,P2,...,Pn ] );
타입드 파일 : procedure Write(F, V1 [V2,...Vn]);
변수값을 파일로 출력한다. F는 출력용으로 오픈된 텍스트
파일이어야 하며 파일이 생략될 경우 표준 출력 장치인 화면
으로 출력된다. 파일 변수 다음의 인수 P1이하는 파일로 실제
출력될 값들이며 이 값에 필드 폭, 정밀도를 지정할 수 있다.
출력할 수 있는 타입은 문자형, 정수형, 실수형, 문자열, 진위
형 등이 있다.
타입드 파일일 경우 출력되는 변수 V1이하는 파일의 요소와
같은 형이어야 한다. 즉 레코드형 파일이라면 출력되는 값도
같은 형의 레코드이어야 한다. 파일의 현재 위치가 파일의 끝
이라면 파일의 크기는 출력된 데이터의 길이만큼 늘어난다.
Writeln system Unit
문법 : procedure Writeln([ var F: Text; ] P1 [, P2, ...,Pn ] );
Write 함수의 기능을 확장한 함수이다. Write를 호출하여 변
수를 파일로 출력하되 변수 값 다음에 EOL을 출력하여 자동
으로 개행되도록 한다.
댓글
댓글 쓰기