몰디브를 꿈꾸며...

[델파이]텍스트 파일 읽기 본문

델파이

[델파이]텍스트 파일 읽기

노란채송화 2011. 7. 14. 10:12

출처 :

http://bloodguy.tistory.com/entry/Delphi-%ED%85%8D%EC%8A%A4%ED%8A%B8-%ED%8C%8C%EC%9D%BC%EC%9D%BD%EA%B8%B0-%EB%B9%84%EA%B5%90

1. FileStream :빠르다. 라인수도 줄일 수 있다. (사실 Readln 빼고는 거의 동일한 수준)

procedureTest_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 :두배 이상 느리다. 라인수도 늘어난다. 왜 쓰는지 의문이다...

procedureTest_Readln;
var
Line:String;
sList: TStringList;
f: TextFile;

begin
sList:=TStringList.Create;
try
AssignFile(f, FILE_NAME);
Reset(f);

while notEOF(f)do begin
Readln(f, Line);
sList.Add(Line)
end;
finally
CloseFile(f);
FreeAndNil(sList);
end;
end;

3. StringList.LoadFromFile :가장 빠른편. (어차피 내부적으로 Stream 을 이용)라인수가 가장 작다.

procedureTest_LoadFromFile;
var
sList: TStringList;

begin
sList:=TStringList.Create;
try
sList.LoadFromFile(FILE_NAME);
finally
FreeAndNil(sList);
end;
end;

4.API : 속도는 별반 차이 없음. CreateFile, ReadFile 이용한다는 점이 특이사항.

procedureTest_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_READorFILE_SHARE_WRITEorFILE_SHARE_DELETE,
nil, OPEN_EXISTING,0,0);
FileSize:=GetFileSize(hFile,nil);
SetLength(Buffer, FileSize);

ifReadFile(hFile, Buffer[1], FileSize, ReadSize,nil)thensList.Text:=Buffer;

finally
CloseHandle(hfile);
FreeAndNil(sList);
end;
end;

5.BlockRead :역시 속도는 그다지 차이 없음. BlockRead 함수를 사용한다는 게 특이점.

procedureTest_BlockRead;
var
sList: TStringList;
f: File;
FileSize, ReadSize: Cardinal;
SearchRec: TSearchRec;
Buffer:String;

begin
sList:=TStringList.Create;
try
FileSize:=0;
ifFindFirst(FILE_NAME, faAnyFile, SearchRec)=0then 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;

Comments