목적 : 파일을 읽어들여 라인별로 StringList 에 저장하는 것
1. FileStream : 빠르다. 라인수도 줄일 수 있다. (사실 Readln 빼고는 거의 동일한 수준)
procedure Test_FileStream;
var
FileStream: TFileStream;
sList: TStringList;
begin
sList:=TStringList.Create;
FileStream:=TFileStream.Create(FILE_NAME, fmShareDenyNone);
try
sList.LoadFromStream(FileStream);
finally
FreeAndNil(FileStream);
FreeAndNil(sList);
end;
end;
2. Readln : 두배 이상 느리다. 라인수도 늘어난다. 왜 쓰는지 의문이다...
procedure Test_Readln;
var
Line: String;
sList: TStringList;
f: TextFile;
begin
sList:=TStringList.Create;
try
AssignFile(f, FILE_NAME);
Reset(f);
while not EOF(f) do begin
Readln(f, Line);
sList.Add(Line)
end;
finally
CloseFile(f);
FreeAndNil(sList);
end;
end;
3. StringList.LoadFromFile : 가장 빠른편. (어차피 내부적으로 Stream 을 이용) 라인수가 가장 작다.
procedure Test_LoadFromFile;
var
sList: TStringList;
begin
sList:=TStringList.Create;
try
sList.LoadFromFile(FILE_NAME);
finally
FreeAndNil(sList);
end;
end;
4. API : 속도는 별반 차이 없음. CreateFile, ReadFile 이용한다는 점이 특이사항.
procedure Test_API;
var
sList: TStringList;
hFile: THandle;
FileSize, ReadSize: Cardinal;
Buffer: String;
begin
sList:=TStringList.Create;
try
hFile:=CreateFile(PChar(FILE_NAME), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,
nil, OPEN_EXISTING, 0, 0);
FileSize:=GetFileSize(hFile, nil);
SetLength(Buffer, FileSize);
if ReadFile(hFile, Buffer[1], FileSize, ReadSize, nil) then sList.Text:=Buffer;
finally
CloseHandle(hfile);
FreeAndNil(sList);
end;
end;
5. BlockRead : 역시 속도는 그다지 차이 없음. BlockRead 함수를 사용한다는 게 특이점.
procedure Test_BlockRead;
var
sList: TStringList;
f: File;
FileSize, ReadSize: Cardinal;
SearchRec: TSearchRec;
Buffer: String;
begin
sList:=TStringList.Create;
try
FileSize:=0;
if FindFirst(FILE_NAME, faAnyFile, SearchRec)=0 then begin
FileSize:=SearchRec.Size;
FindClose(SearchRec);
end;
AssignFile(f, FILE_NAME);
SetLength(Buffer, FileSize);
Reset(f, 1);
BlockRead(f, PChar(Buffer)^, FileSize, ReadSize);
sList.Text:=Buffer;
finally
CloseFile(f);
FreeAndNil(sList);
end;
end;
'Delphi' 카테고리의 다른 글
[Delphi] MAC Address 확인 (2) | 2009.04.18 |
---|---|
[Delphi] 파일을 HEX 로 읽어들이기 (0) | 2009.04.18 |
[Delphi] 유니코드로 인코딩 된 텍스트 파일 읽기 (0) | 2009.04.18 |
[Delphi] 다른 프로그램에서 wav 파일 재생시 가로채기 (0) | 2009.04.18 |
[Delphi] 소스 관리 (0) | 2009.04.18 |