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

C++빌더 Q&A
C++Builder Programming Q&A
[59337] Re:파일 입출력시 다른 함수로 파일핸들러 전달에 관한 질문입니다.
김시환 [godson2] 1416 읽음    2009-12-04 14:33
전체소스 볼 시간은 안돼서 일단 아래 소스에서 몇가지 문제가 있네요...

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) ;

}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
59325 파일 입출력시 다른 함수로 파일핸들러 전달에 관한 질문입니다. 임형섭 1755 2009/12/03
59337     Re:파일 입출력시 다른 함수로 파일핸들러 전달에 관한 질문입니다. 김시환 1416 2009/12/04
59328     Re:파일 입출력시 다른 함수로 파일핸들러 전달에 관한 질문입니다. 이길남.HoPe 1286 2009/12/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.