안녕하세요. 지금 몇개의 폴더를 하나의 폴더로 복사해온 후에 그 폴더를 압축하는 프로그램을 짜고 있습니다. 물론 이게 끝이 아니고 이 압축된 파일을 클라이언트쪽으로 보내야 하는데 자꾸 에러가 나타나 도대체 무엇이 문제일까를 알아내려 하나하나 단계를 밟아가며 해볼려고 하다가 이상한 난관에 부딪치게 되었습니다.
우선 아래 소스를 보시면
procedure TForm1.Button1Click(Sender: TObject);
var
sGraphic, sSound, sNetWork, sMainBoard : String;
cGraphic, cSound, cNetWork, cMainBoard : String;
begin
Button1.Enabled := False;
listBox1.Items.Add('ini File의 정보를 취합하기 시작합니다.');
orderini := TiniFile.Create('C:\\Result\12345678\12345678.ini');
listBox1.Items.Add('복사할 파일의 정보를 취합하기 시작합니다.');
sGraphic := orderini.ReadString('Device Name', 'Graphic Card', '');
sSound := orderini.ReadString('Device Name', 'Sound Card', '');
sNetWork := orderini.ReadString('Device Name', 'NetWork Card', '');
sMainBoard := orderini.ReadString('Device Name', 'MainBoard', '');
listbox1.Items.Add('정보를 확인합니다.');
listbox1.Items.Add('Graphic Card = ' + sGraphic);
listbox1.Items.Add('Sound Card = ' + sSound);
listbox1.Items.Add('NetWork Card = ' + sNetWork);
listbox1.Items.Add('MainBoard Card = ' + sMainBoard);
listBox1.Items.Add('복사할 디렉토리에 관한 정보를 취합하기 시작합니다.');
cGraphic := orderini.ReadString('Copy Folder Path', sGraphic, '');
cSound := orderini.ReadString('Copy Folder Path', sSound, '');
cNetWork := orderini.ReadString('Copy Folder Path', sNetwork, '');
cMainBoard := orderini.ReadString('Copy Folder Path', sMainBoard, '');
listBox1.Items.Add('모든 정보의 취합 작업을 마칩니다.');
listBox1.Items.Add(cGraphic + ' 의 복사를 시작합니다.');
CopyFolder(cGraphic);
listBox1.Items.Add(cGraphic + ' 의 복사를 완료하였습니다.');
listBox1.Items.Add(cSound + ' 의 복사를 시작합니다.');
CopyFolder(cSound);
listBox1.Items.Add(cSound + ' 의 복사를 완료하였습니다.');
listBox1.Items.Add(cNetwork + ' 의 복사를 시작합니다.');
CopyFolder(cNetwork);
listBox1.Items.Add(cNetWork + ' 의 복사를 완료하였습니다.');
listBox1.Items.Add(cMainBoard + ' 의 복사를 시작합니다.');
CopyFolder(cMainBoard);
listBox1.Items.Add(cMainBoard + ' 의 복사를 완료하였습니다.');
orderini.Free;
ShowMessage('모든 폴더의 복사를 완료하였습니다.');
// listBox1.Items.Add('폴더의 압축을 시작합니다.');
// FolderCompress;
// ShowMessage('모든 폴더의 압축을 완료하였습니다.');
Button1.Enabled := True;
end;
procedure Tform1.CopyFolder(s1: String);
var
F : TShFileOpStruct;
CopyPath : String;
begin
CopyPath := 'C:\\Result\';
F.Wnd := Handle; // if 0, then no parent and can task switch away
F.wFunc := FO_COPY;
F.pFrom := PChar(s1);
F.pTo := PChar(CopyPath);
F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
if ShFileOperation(F) <> 0 then ShowMessage('Copy Failed')
else listbox1.Items.Add(s1 + ' 복사를 성공하였습니다.');
end;
{procedure Tform1.FolderCompress;
var
iZipName, iDataDirPath, iCompressDirPath, ZipFilePath : string;
begin
ZipFilePath := 'C:\\Result\ZipFileFolder\';
if Not DirectoryExists(ZipFilePath) then ForceDirectories(ZipFilePath);
iZipName := 'Driver.zip';
iDataDirPath := 'C:\\Result\';
iCompressDirPath := ZipFilePath + iZipName;
ZIP.ArchiveFile := iCompressDirPath;
ZIP.FileSpec.Clear;
ZIP.FileSpec.Add(iDataDirPath);
ZIP.Compress;
end;}
보시는 바처럼 압축에 관한 함수를 주석처리하고 실행으로 시키면 ini File을 읽어와서 처음부터 제대로 폴더를 복사해가지고 옵니다. 하지만 이것을 주석처리를 해제하고 실행하면 처음에 (CopyFolder(cGraphic);--> 제일 처음으로 복사를 시작하는 부분입니다.) 경로를 찾을 수 없어서 폴더를 복사할 수 없다는 메세지가 나오고 그 다음부터는 복사가 잘됩니다.
문제를 찾아내려해도 도저히 제 실력으로는 안되네요.
고수님들 이게 무슨 문제일까요? 지적 기다리고 있겠습니다.
귀찮으시더라도 좀 부탁 좀 드리겠습니다.
그럼 수고하세요.
p.s : 전 지금 델파이 7에서 프로그램을 하고 있고, 윈도우는 xp home edition입니다.
그리고 압축 컴포넌트는 ZipTV를 썼구요.
소스도 같이 첨부합니다.