[delphi] kopiowanie katalogów wraz z plikami

0

Jak zrobić to co jest w pytaniu ale nie posługując się procedurą która jest w poście
http://www.4programmers.net/forum/index.php?action=show&id=19925

coś krótszego musi przecież istnieć.
w faq II jest coś takiego

uses ShellAPI ;
procedure TForm1.Button1Click(Sender: TObject);
var
S : TSHFileOpStruct;
begin
S.Wnd := Handle;
S.wFunc := FO_COPY; * operacja - kopiowanie
S.pFrom := 'C:gry'; * z jakiego katalogu?
S.pTo := 'C:WindowsPulpitgry'; * do jakiego katalogu?
S.fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION or FOF_SIMPLEPROGRESS;
S.fAnyOperationsAborted := True; * jest mozliwosc anulowania?
S.lpszProgressTitle := 'Trwa kopiowanie. Nie widzisz?'; * tekst

ShFileOperation(S); * wykonaj
end;

Ale wyskakuje że nie można skpiować plik: system windows nie może znaleźć pliku itd.....
mimo iż zmieniłem 2 linie na własne potrzebu

S.pFrom := 'C:\test'; * z jakiego katalogu?
S.pTo := 'D:\test'; * do jakiego katalogu?

i tak też próbowałem

S.pFrom := 'C:test'; * z jakiego katalogu?
S.pTo := 'D:test'; * do jakiego katalogu?

i nic nie pomaga
a katalog c:\test jest na dysku pomyślałem że moze musze utworzyć katalog na d:\test żeby miał gdzie kopiować ale też nic co jest nie tak

--
Pozdrowienia {hello}
Waldi Koronowo
[email protected]

0

tez miałem ten problem ale znalazłem i działa

uses ShellAPI ;
procedure TForm1.Button1Click(Sender: TObject);
var
S : TSHFileOpStruct;
begin
S.Wnd := Handle;
S.wFunc := FO_COPY; // operacja - kopiowanie
S.pFrom := 'C:\katalog1'; // z jakiego katalogu?
S.pTo := 'C:\katalog2'; // do jakiego katalogu?
S.fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION or FOF_SIMPLEPROGRESS;
S.fAnyOperationsAborted := True; // jest mozliwosc anulowania?
S.lpszProgressTitle := 'Trwa kopiowanie'; // tekst

ShFileOperation(S); // wykonaj
end;

warunek ,że musi istniec katalog do którego kopiujesz ( mozesz go wczesniej stworzyc w programie )

Dodatkowe informacje to:
FOF-ALLOWUNDO - mozliwe jest cofniecie operacji
FOF_FILESONLY - przenosi tylko pliki z folderu,a nie pliki z podflderu
FOF_NOCONFIRMATION - w razi koniecznosci nie jest wyswie-tlana informacja(np,: w przypadku istnieniapliku o tej samej nazwie)
FOF_NOCONFIRMMKDIR - nie tworzy nowego folderu, jezelioperacja tego wymaga
FOF_SILENT - okno kopiowania nie zostanie wyswietlone
FOF_SIMPLEPROGRESS - wyswietla wybrany przez ciebie tekst w polu lpszProgressTitle, a nie wyswietla kopiowanego pliku
FOF_RENAMEONCOLLISION - w przypadku istnienia pliku o tej samej nazwie, jego nazwa jest zmieniona.

oczywiście zamiast ścieżek dostępu mozesz podac ściezki jakie są wyświetlane w jakims w polu tekstowym czyli string ale musisz poprzedzic to wyrażeniem pchar
czyli np

P.pFrom := Pchar(Label1.Caption); // z jakiego katalogu?
P.pTo := Pchar(Edit1.Text);// do jakiego katalogu?

0

hejka. próbuję skopiować tylko pliki z katalogu gdzie są też inne podkatalogi i pliki
Stosuje jako flagi
fFlags:=FOF_NOCONFIRMATION or FOF_FILESONLY
i to nie działa bo kopiuje razem z podkatalogami
nie pomaga zastosowanie zamiast 'or' znaków 'and' czy '+'
cały kod mojej procedury kopiującej jest w dll'u, i daję oczywiście #0 na końcu
HELP ;(

już wiem!!!!!!!!!
na koncu pFrom musze dać maske .
np C:/katalog/.
i oczywiście pFrom oraz pTo MUSZĄ być zakoćzone dwoma zerami #0+#0

pFrom:=pAnsiChar(C:/katalog/. +#0+#0); // z katalogu
pTo:=pAnsiChar(d:/katalog +#0+#0);// do katalogu...
teraz to działa jak marzenie [green]
zostawiam to info dla potomnych

1 użytkowników online, w tym zalogowanych: 0, gości: 1