|
한개의 폴더 안에 있는 여러개의 파일들을 지정된 위치에 copy할려합니다.
void __fastcall TForm1::CopyFile(AnsiString fileName)
{
//char pathTarg[MAX_PATH];
//char pathDest[MAX_PATH];
FILE *input;
HANDLE hpFile;
BYTE *Buffer;
// 해당 파일.(부트 폴더)
//GetCurrentDirectory(MAX_PATH, pathTarg);
//strcat(pathTarg, "\\BootDisk\\");
//strcat(pathTarg, fileName.c_str());
AnsiString strPathTerg = "BootDisk\\" + fileName;
// 목적 파일
//strcpy(pathDest, CurrentDisk.c_str()); //예) D:\
//strcat(pathDest, fileName.c_str());
AnsiString strPathDest = CurrentDisk + fileName;
//if ((input = fopen(pathTarg, "rb")) != NULL)
if ((input = fopen(strPathTerg.c_str(), "rb")) != NULL)
{
/** ERROR
tmpFileSize = filesize(input);
Buffer = (BYTE *) malloc(tmpFileSize);
ZeroMemory(Buffer, tmpFileSize);
fread(&Buffer[0], 1, tmpFileSize, input);
try
{
TFileStream *MyFStream;
MyFStream = new TFileStream(strPathDest, fmCreate);
try
{
MyFStream->Write(&Buffer[0], tmpFileSize);
}
catch(...) {}
// 2003.5.30 혹시..
//MyFStream->Free();
delete MyFStream;
}catch(...){}
*/
// BYTE *Buffer;
tmpFileSize = filesize(input);
Buffer = (BYTE *) malloc(tmpFileSize);
ZeroMemory(Buffer,tmpFileSize);
//fread(&Buffer[0], 1, tmpFileSize, input);
fread(Buffer, 1, tmpFileSize, input);
//-----------------------------
// file write
//hpFile = CreateFile(pathDest,
hpFile = CreateFile(strPathDest.c_str(),
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(hpFile == INVALID_HANDLE_VALUE)
return;
WriteFile(hpFile,
Buffer,
tmpFileSize,
&nBytesWriten,
NULL
);
fclose(input);
free(Buffer);
}
else
{
//-----------------------------
// file write
hpFile = CreateFile(strPathDest.c_str(),
GENERIC_WRITE,
0, // not share mode
NULL, // security attribute
CREATE_ALWAYS, // create allways
FILE_ATTRIBUTE_NORMAL,
NULL // handle to file with attributes to copy
);
if(hpFile == INVALID_HANDLE_VALUE)
return;
}
CloseHandle(hpFile);
}
파일을 copy하는 부분은 위와 같습니다..
그리고 파일들에 대한 정의는
Unit.cpp에서
전역변수로 이렇게 선업했습니다.
AnsiString fileName[] = { "AAAAAA1.SYS", "AAAAAA2.SYS",
"AAAAAA3.SYS", "KKKKKK3.SYS",
"KKKKKK4.SYS", "KKKKKK5.BAT",
"MYFILE1.SYS", "MYFILE2.SYS",
"MYFILE3.SYS", "MYFILE4.COM",
"MYFILE5.SYS", "MYFILE6.BIN",
"RYU3.EXE", "RYU4.EXE",
"MYFILE7.EXE", "MYFILE8.EXE",
"MYFILE9.SYS", "MYFILE10.SYS",
"IOIO.SYS", "MYFILE12.EXE",
"RYU1.SYS", "MYFILE13.COM",
"RYU2.SYS", "MYFILE14.DAT" };
filecopy를 부르는데는 이렇게...
if(i == startPosition + fileNum && CheckBox1->Checked && fileNum < 24)
CopyFile(fileName[fileNum]);
fileNum++;
startPosition++;
}
문제는 file들이 깨지거나, 크기가 달라지거나하는 문제가 생깁니다.
어쩔때는 정상적이고, 어쩔때는 비정상적으로 문제가 생깁니다.
어디서 문제가 생겼는지여..고수님들의 의견 부탁합니다.
또하나는
BOOL CopyFile(
LPCTSTR lpExistingFileName, // pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists // flag for operation if file exists
);
이 함수를 쓰니 에러가 나는군요..
왜 그런건지...좀..
|