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 파일을 합치려고 합니다..
: : :
: : :
그리고 나중엔 이것을 분리해야 하고요..
: : :
: : :
어떤식으로 접근하면 좋을까요..
: : :
: : :
고맙습니다..
: : :
: : :
: : :
: : :