|
전체소스 볼 시간은 안돼서 일단 아래 소스에서 몇가지 문제가 있네요...
1. char* FileName::fileOpen() 함수안에서 hFile 즉 파일 핸들을 리턴하고 싶으신 모양인데 일단 hFile에 대한 변수 선언이 빠져 있고 아울러 open 함수의 리턴값은 int 형입니다.
따라서 char* FileName::fileOpen() --> int FileName::fileOpen() 로 변경되어야 합니다. hFile 역시 int 형으로 변수 선언을 해 주셔야 겠지요...
2. fileOpen() 함수 내부에 있는 fileName 이 어디에 정의된 변수인지 궁금합니다. fileOpen 함수가 정의된 FileName 클래스의 멤버 변수라면 이해가 되긴 하지만 아래의 소스 만으로는 소속이 좀 불분명 하네요...
아래 소스상으로 파일명은 compress() 함수에서 생성이 되는 바 멤버함수도 아닌듯 보입니다. 따라서 fileOpen 함수를 fileOpen(char* fileName) 이런식으로 파라메터로 파일이름을 넘겨주어야 할듯 합니다.
3. void FileCompress::compress() 함수에서 fileOpen(); 함수를 호출을 했는데 두개의 함수가 서로다른 클래스입니다. FileName 이라는 클래스의 객체에 대한 생성이 된 후 그 객체에 대한 멤버함수 호출이 이루어 져야 합니다.
FileName* pFileName = new FileName() ;
pFileName->fileOpen() ;
delete pFileName ;
뭐 이런 과정이 필요하겠지요...
그럼 최종적으로 아래 소스는 이런 형식이 될 수 있겠네요..
int FileName::fileOpen(char* fileName)
{
int hFile = open(fileName, O_RDONLY | O_BINARY);
if(hFile == -1)
{
err("errer file Open");
}
return hFile ;
}
//-------------------------------------------------
void FileCompress::compress()
{
int hFile;
char fileName[20];
char buffer[1024];
int readNum;
sprintf(fileName,"%s.zip",getFileName());//압축된 파일 이름
hGz = gzopen(fileName,"wb");
FileName* pFileName = new FileName() ;
pFileName->fileOpen(fileName) ;
delete pFileName ;
while((readNum = read(hFile, buffer, 1024)) != 0)//파일 끝까지 읽기
{
if(gzwrite(hGz,buffer,readNum) < 0)//압축
{
err("qzwrite error");
}
}
printf("\n압축완료");
}
함수를 나누는 연습이라면 뭐 여러모로 공부가 되겠지만 그렇지 않다면 무조건 파일을 나누는 것은 무의미 합니다. 아울러 클래스를 만들때도 잘 설계하지 않으면 나중에 골치아픈일이 많습니다.
아래는 참고로 만들어 본 것입니다.
int FileOpen(AnsiString FileName, FILE* pFile)
{
if(( pFile = fopen(FileName.c_str(), "wt"))== NULL) return 0 ;
else return 1 ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
FILE* pFile ;
if ( FileOpen("c:\\test.txt", pFile) == 0) ShowMessage("File Not Found!!") ;
fclose(pFile) ;
}
//---------------------------------------------------------------------------
|