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
[18082] Re:고맙습니다. 근데..
유영인 [Chris] [cuperido] 891 읽음    2002-05-01 13:40
Button1의 이벤트는 병합, Button2 의 이벤트는 병합 해제입니다.
분석해 보시구.. 의문나시는점 있으면.. 리플을.. ^^;

아참.. 쓰고 나서 생각이 난건데.. 파일 사이즈가 int 형을 넘으면.. 에러가 생기겠군요.. -_-;;
__int64 형으로 잡아주시면 될껍니다.. fgetc 로 한바이트씩 읽어서 속도에 문제가 생기면, fread, fwrite 를 이용하시면 되구요..  :)


//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"


#define MERGE_COUNT          2                   // 병합할 파일 갯수
#define MERGE_FILENAME       "C:\\MERGE.DAT"     // 병합 파일 이름

TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

String            FILENAMES[MERGE_COUNT] =
                     { "C:\\cuperido.ccf", "C:\\debug.txt" };
FILE              *fiHandle, *fiWriteHandle;
char              chFileName[128];
int               itFileSize, itCount, itTemp;



// 파일을 연다
fiWriteHandle = fopen(MERGE_FILENAME, "wb");


for(itCount = 0; itCount < MERGE_COUNT; itCount ++) {
   fiHandle = fopen(FILENAMES[itCount].c_str(), "rb");


   if(fiHandle) {
     // 파일 사이즈를 알아냄
     fseek(fiHandle, 0, SEEK_END);
     itFileSize = ftell(fiHandle);
     fseek(fiHandle, 0, SEEK_SET);


     // 파일 사이즈를 기록
     for(itTemp = 0; itTemp < sizeof(itFileSize); itTemp ++) {
       // itFileSize 에서 제일 끝 8 Bit만 (1 Byte만) 기록
       fputc(itFileSize & 0xFF, fiWriteHandle);

       // itFileSize에서 8 Bit를 자름
       itFileSize = itFileSize >> 8;
     }


     // 파일 이름을 기록
     strcpy(chFileName, FILENAMES[itCount].c_str());
     for(itTemp = 0; itTemp < sizeof(chFileName); itTemp ++)
       fputc(chFileName[itTemp], fiWriteHandle);


     // 파일 기록
     while(!feof(fiHandle))
       fputc(fgetc(fiHandle), fiWriteHandle);

    } else {
     ShowMessage("파일이 존재하지 않습니다");
   }


   fclose(fiHandle);
}


fclose(fiWriteHandle);

ShowMessage("파일을 병합하였습니다");

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{

FILE              *fiHandle, *fiWriteHandle;
int               itFileSize, itCount, itTag;
char              chFileName[128];



// 파일을 연다
fiHandle = fopen(MERGE_FILENAME, "rb");


while(!feof(fiHandle)) {
   // 파일 사이즈를 알아냄
   itFileSize = 0;
   itTag      = 1;

   for(itCount = 0; itCount < sizeof(itFileSize); itCount ++) {
     itFileSize += fgetc(fiHandle) * itTag;
     itTag      *= 0x100;
   }


   // 파일 이름을 기록
   for(itCount = 0; itCount < sizeof(chFileName); itCount ++)
     chFileName[itCount] = fgetc(fiHandle);


   // 기록할 파일을 오픈
   fiWriteHandle = fopen(chFileName, "wb");


   // 파일 기록
   for(itCount = 0; itCount < itFileSize; itCount ++)
     fputc(fgetc(fiHandle), fiWriteHandle);

    
   // NULL;
   fgetc(fiHandle);

   fclose(fiWriteHandle);
}


fclose(fiHandle);

ShowMessage("파일 병합을 해제 하였습니다");

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



현정환 님이 쓰신 글 :
: 답변 감사합니다..
: 근데 이것만 가지고는 잘 모르겠네요..
: 죄송한 부탁인데 실제로 사용할 수 있는 코드도..
: 알려 주셨으면 합니다..
: 정말 고맙고 정말 죄송합니다. ^^;;;;;
:
:
:
: 유영인 [Chris] 님이 쓰신 글 :
: : 바이너리는 텍스트로 저장을 못하지만, 텍스트는 바이너리로 저장이 가능합니다. 이것을 이용해서 텍스트 파일도 바이너리 파일로 저장하시면 됩니다.
: :
: : 두 함수를 만들어 놓으시고, 아래와 같이 순서를 하시면 되겠죠.
: :
: : 1. 1번 파일의 크기를 씀
: : 2. 1번 파일의 데이터
: : 3. 2번 파일의 크기를 씀
: : 4. 2번 파일의 데이터
: :
: : 이렇게 하면, 하나의 파일이 완성되겠지요...
: :
: :
: :
: : 현정환 님이 쓰신 글 :
: : : : : : : : : : : : : : : : : : : : :
바이너리 파일이 있고..
: : :
 
: : :
이것의 정보를 가지고 있는 text 파일을 합치려고 합니다..
: : :
 
: : :
그리고 나중엔 이것을 분리해야 하고요..
: : :
 
: : :
어떤식으로 접근하면 좋을까요..
: : :
 
: : :
고맙습니다..
: : :
 
: : : : : :
: : :

+ -

관련 글 리스트
18049 두 파일을 합치려고 하는데요.. 현정환 780 2002/04/30
18056     Re:두 파일을 합치려고 하는데요.. 유영인 [Chris] 845 2002/04/30
18080         고맙습니다. 근데.. 현정환 745 2002/05/01
18082             Re:고맙습니다. 근데.. 유영인 [Chris] 891 2002/05/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.