몰디브를 꿈꾸며...
[델파이]텍스트 파일 읽기 본문
출처 :
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%901. 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;
'델파이' 카테고리의 다른 글
컴포넌트 추가 및 삭제 (0) | 2015.03.19 |
---|---|
[델파이]서비스 프로그램 만들기 (0) | 2012.02.22 |
[델파이]레지스트리 읽기/쓰기 (0) | 2012.02.21 |
[델파이]시스템 시간 가져오기 (0) | 2012.02.08 |