파일 복사하는 소스를 찾아서 적용했는데요...
복사할 폴더와 복사될 폴더를 입력한 후 버튼을 누르면 해당 폴더에 파일은 복사가 잘 됩니다.
그 다음에 복사한 파일만 리스트 박스에 저장해서 보여주고 싶은데..
이부분에서 문제가 생깁니다.
만약 해당 폴더가 없다면 생성 후 잘 저장되고 리스트 박스에도 잘 올라갑니다.
그런데 기존에 폴더가 있을때 추가를 하면 리스트박스에 이상하게 저장이 됩니다.
예를 들면
제가 C:\work\2009\3월 안에 있는 a.doc, b.doc 라는 파일을
D:\파일관련 폴더에 저장하고 싶습니다.
D:\파일관련 안에 폴더가 없을경우에는 잘 저장이 되고 ( a.doc 랑 b.doc 파일이 ) ListBox1에 잘 올라가는데요..
ListBox1
D:\파일관련\a.doc
D:\파일관련\b.doc
그런데 D:\파일관련안에 P, Q, R 이라는 폴더가 있을경우
(D:\파일관련\P\ 안에 파일들이 있고.. Q, R도 마찬가지구요..)
마지막 폴더 즉, R의 폴더 와 R 폴더 안에 있는 파일들이 listBox1에 저장이 됩니다..
(a.doc랑 b.doc는 D:\파일관련 안에 잘 저장이 되구요... )
R에 1.txt, 2.txt 가 있다고 가정하면
ListBox1에는
D:\파일관련\R\1.txt
D:\파일관련\R\2.txt
D:\파일관련\R
이렇게요..;;
왜 그런지 모르겠습니다...
꼭 답변 부탁드립니다. ㅠㅠ
아래 해당 부분 소스만 첨부했어요..;;
procedure TForm1.Button3Click(Sender: TObject);
...
copyFiles(memo2.text, mPath);
// memo2.text : 복사할 폴더 mPath := 복사될 폴더 입니다
...
end;
procedure TForm1.CopyFiles(FromDir, ToDir : string);
var
FOS :tSHFileOpStruct;
begin
FromDir := Trim(FromDir);
if FromDir[Length(FromDir)] <> '\' then
FromDir := FromDir + '\';
ToDir := Trim(ToDir);
with FOS do
begin
Wnd := 0;
wFunc := FO_COPY;
pFrom := PChar(FromDir + '*.*' + #0);
pTo := PChar(ToDir + #0);
fFlags := FOF_ALLOWUNDO or FOF_MULTIDESTFILES or FOF_NOCONFIRMMKDIR;
end;
if SHFileOperation(FOS) = 0 then
begin
ShellExecute(0, pchar('open'), pchar('explorer.exe'), pchar(ToDir), nil, SW_SHOW);
findfiles(ToDir);
end;
end;
function TForm1.FindFiles(FolderName: string): Integer;
var
Sr: TSearchRec;
str: string;
begin
listBox1.Items.Clear;
if (findFirst(FolderName + '\*.*', faAnyFile, Sr)) = 0 then
begin
while FindNext(Sr) = 0 do begin
if (Sr.Name <> '.') and (Sr.Name <> '..') then
begin
if (Sr.Attr and faDirectory) = faDirectory then
FindFiles(FolderName + '\' + Sr.Name);
ListBox1.Items.Add(FolderName + '\' + Sr.Name);
end;
end;
cfRe := 1;
end
else
cfRe := -1;
FindClose(Sr);
end;
아래 부분이 잘못