Witam, napisałem krótki program do zmiany nazw plików wykorzystując do tego klasę TShFileOpStruct. Nie wiem czemu przy około 10% plików wyskakuje błąd: "Nie można zmienić nazwy plik: Wybierz tylko jeden plik do zmiany nazwy lub użyj symboli wieloznacznych MS-DOS (na przykład *.txt) aby zmienic nazwy grupy plików o podobnej nazwie".
Jak temu zaradzić? a może warto przerobić program i zmieniać nazwy plików inną metodą? Oto kawałek kodu:
s:=FLB1.Items[i]; //ładuje do s nazwe pliku z FileListBox
pom:=s;
ext:=ExtractFileExt(s); //ext - rozszerzenie pliku
s:=ExtractFileName(s);
s:=Copy(s,1,Length(s)-Length(ext)); //s - nazwa pliku bez rozszerzenia
{wypełnienie zmiennej Sh typu ShFileOpStruct}
Sh.Wnd:=handle;
sh.wFunc:=FO_RENAME;
Sh.pFrom:=PAnsiChar(DLB1.Directory+'\'+pom); //DLB1 - DirectoryListBox
s:=Form1.Zamien(s); //funkcja zmieniajaca nazwe pliku
Sh.pTo:=PAnsiChar(DLB1.Directory+'\'+S+EXT);
Sh.fFlags:= FOF_ALLOWUNDO+ FOF_NOCONFIRMATION+ FOF_FILESONLY+ FOF_RENAMEONCOLLISION+ FOF_WANTMAPPINGHANDLE;
sH.lpszProgressTitle:='TRWA KOPIOWANIE';
Memo1.Lines.Add(s);
ShFileOperation(Sh);
to wszystko w pętli, bo zawsze jest do zmiany od kilku do kilkuset plików.