Witam,
Kod poniżej. Mam dwa FileListBoxy (lbSrcFiles i lbDestFiles). Oba maja własciwość MultiSelect na True. Chcę skopiować to, co zaznaczone z okienka lbSrcFiles do lbDestFiles. Czasem działa, nie ma reguły, ale na 80% przypadków dostaję błąd:
"Nie można skopiować plik: Nie można odczytać z pliku lub dysku źródłowego". Pliki nie są zabezpieczone, ani ukryte, czy systemowe. Na komputerze jestem administratorem. Gdzie popełniam błąd?
Delphi 7 PE, Windows XP Pro.
Jacek
{
Procedura kopiuje wszystkie pliki wybrane na liście plików lbSrcFiles
(TFileListBox), do lokalizacji wyświetlanej w lbDestFiles (TFileListBox)
}
procedure TMain.btnSrcDestCopyClick(Sender: TObject);
var
source, destination: PChar;
i: Integer;
Sh: TShFileOpStruct;
begin
if lbSrcFiles.Items.Count = 0 then Exit;
for i := 0 to lbSrcFiles.Items.Count - 1 do
begin
if not lbSrcFiles.Selected[i] then Continue; // element nie jest zaznaczony
// Kopiowanie
Sh.Wnd := Handle;
Sh.wFunc := FO_Copy;
{ Jezeli plik znajduje sie w glownym drzewie to nazwa pliku do skopiowania
jest tworzona przez dodanie nazwy pozycji do wlasciwosci Directory, jezlie
nazwa jest w podkatalogu miedzy nazwe katalogu a nazwe pliku wstawiany jest
backslash; podobnie przy nazwie docelowej
}
if Length(lbSrcFiles.Directory) = 3 then
source := PChar(lbSrcFiles.Directory + lbSrcFiles.Items.Strings[i])
else
source := PChar(lbSrcFiles.Directory + '\' + lbSrcFiles.Items.Strings[i]);
Sh.pFrom := source;
if Length(lbDestFiles.Directory) = 3 then
destination := PChar(lbDestFiles.Directory + ExtractFileName(lbSrcFiles.Items.Strings[i]))
else
destination := PChar(lbDestFiles.Directory + '\' + ExtractFileName(lbSrcFiles.Items.Strings[i]));
Sh.pTo := PChar(destination);
Sh.fFlags := FOF_SIMPLEPROGRESS + FOF_FILESONLY;
Sh.fAnyOperationsAborted := True;
Sh.lpszProgressTitle := 'Kopiowanie...';
// Wykonaj kopiowanie
SHFileOperation(Sh);
// Aktualizuj liste plikow
lbDestFiles.Update;
end;
end;