간단한 내용이지만 항상 반복되는 경우가 많아
쉽게 쓰기 위해 간단히 FILE 관련 메소드를 래핑해 본 TFILE 클래스입니다.
사용법은 기존 FILE 관련 함수를 그대로 단지 fp 만 생략해서 쓴다고 생각하시면 됩니다.
그리고 자동으로 파일이 fclose 되니 파일 닫는 것 신경 안써도 될 것입니다.
직관성을 높이기 위해 명칭을 그대로 유지했습니다.
너무 간단해서 그외 설명은 필요없을 것 같군요.
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
// C 스타일의 파일 제어 클래스. Written by KTS.
// - 자동으로 파일이 닫히게 하기
// - fp 를 생략할 수 있다.
class TFILE
{
public:
FILE *fp;
public:
TFILE()
{
fp = NULL;
}
TFILE(String filename, char *mode)
{
fp = ::fopen(filename.c_str(), mode);
}
~TFILE()
{
if (fp) ::fclose(fp);
}
bool IsOpen()
{
return fp != NULL;
}
int fseek(int ptr, int whence)
{
return ::fseek(fp, ptr, whence);
}
int GetFileSize()
{
int cur = fseek(0, SEEK_CUR);
fseek(0, SEEK_END);
int filesize = ::ftell(fp);
fseek(cur, SEEK_SET);
return filesize;
}
int fread(void *ptr, int size, int pcs)
{
return ::fread(ptr, size, pcs, fp);
}
int fwrite(void *ptr, int size, int pcs)
{
return ::fwrite(ptr, size, pcs, fp);
}
int fprintf(char* Format, ...)
{
int n;
char buffer[32000];
va_list args;
va_start(args, Format);
n = vsprintf(buffer, Format, args);
va_end(args);
return ::fprintf(fp, buffer);
}
char* fgets(char *buf, int len)
{
return ::fgets(buf, len, fp);
}
int fputs(char *buf)
{
return ::fputs(buf, fp);
}
void fclose()
{
if (fp) ::fclose(fp);
fp = NULL;
}
FILE *fopen(String filename, char *mode)
{
this->fclose();
fp = ::fopen(filename.c_str(), mode);
return fp;
}
// 필요한 것은 아래에 더 추가해서 사용.
};
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
// 예)
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TFILE file("c:\\windows\\win.ini", "rb");
if (file.fp == NULL)
return;
int filesize = file.GetFileSize();
char *buf = new char[filesize + 1];
file.fread(buf, filesize ,1);
buf[filesize] = 0;
Memo1->Lines->Text = buf;
delete[] buf;
}
//---------------------------------------------------------------------------