C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[862] TFILE C 스타일 파일제어 래퍼 클래스.
김태선 [cppbuilder] 7720 읽음    2009-02-25 16:51
간단한 내용이지만 항상 반복되는 경우가 많아
쉽게 쓰기 위해 간단히 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;
}
//---------------------------------------------------------------------------
김태선 [cppbuilder]   2012-11-28 20:07 X
실무에 사용해보면
정말로 유용합니다. ^ ^

+ -

관련 글 리스트
862 TFILE C 스타일 파일제어 래퍼 클래스. 김태선 7720 2009/02/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.