Ĺadny brzuch
Mam taka procedurę:
procedure zmiananazw; var sciezka,nowa,stara,nazwa,rozszerzenie:String; i,j,poczatek,k:LongInt; OldStr,NewStr:String; x:Real; begin Form1.Label2.Caption:='Wykonano: 0%'; X:=0; if FileExists(Form1.Edit1.Text) then Form1.autorzy.Items.LoadFromFile(Form1.Edit1.Text); try poczatek:=StrToInt(Form1.indeks.Text); except on EConvertError do ShowMessage('Podano zły indeks. Indeks musi by liczbą całkowitą dodatnią!'); end; k:=Form1.autorzy.Items.Count; Form1.ilosc.Show; OldStr:='_'; NewStr:=' '; Form1.Height:=550; Form1.ilosc.Top:=483; Form1.ilosc.Position:=0; Form1.ilosc.Max:=Form1.autorzy.Items.Count - poczatek; try for i:=poczatek to Form1.autorzy.Items.Count-1 do begin x:=(i+1)/(k)*100; Form1.Label2.Caption:='Wykonano: ' + FloatToStr(x) + '%'; sciezka:=Form1.glowna.Text + Form1.autorzy.Items[i]; Form1.ksiazki.Directory:=Form1.glowna.Text + Form1.autorzy.Items[i]; Form1.autorzy.ItemIndex:=i; for j:=0 to Form1.ksiazki.Items.Count-1 do begin stara:=sciezka + '\' + Form1.ksiazki.Items[j]; rozszerzenie:=RightStr(stara, 4); nazwa:=LeftStr(stara, Length(stara)-4); nowa:=StringReplace(nazwa, OldStr, NewStr, [rfReplaceAll]); RenameFile(sciezka + '\' + Form1.ksiazki.Items[j], nowa + rozszerzenie); end; end; x:=(i+1)/(k)*100; Form1.Label2.Caption:='Wykonano: ' + FloatToStr(x) + '%'; Form1.ilosc.Position:=Form1.ilosc.Position+1; end; except on EInOutError do ShowMessage('Wystąpił błąd przy próbie wczytania plików z katalogu: ' + Form1.autorzy.Items[i] + '. Prawdopodobnie podany katalog nie istnieje.'); end; ShowMessage('Zakończono'); end;
Zmienia on nazwy plików wyświetlanych w TFileBox, ale chciałbym też żeby zmieniał nazwy katalogów tam wyświetlanych. Jak można to zrobić??
Użytkownik salat25 edytował ten post 05 lipiec 2006, 16:57
Poczytaj o strukturze SHFILEOPSTRUCT i funkcji ShFileOperation.
Sprawdź debuggerem, czy nazwy katalogów w funkcji renamefile() są prawidłowe :)
Poczytaj o strukturze SHFILEOPSTRUCT i funkcji ShFileOperation. Po co? :>
Użytkownik Cyrkiel edytował ten post 05 lipiec 2006, 19:17
Po co? A RenameFile z tego co wiem nie zmiena nazwy plików tylko katalgów. Żeby zmienić nazwę katalogu ja był użył SHFileOperation.
Po co? A RenameFile z tego co wiem nie zmiena nazwy plików tylko katalgów. Żeby zmienić nazwę katalogu ja był użył SHFileOperation. RenameFile() zmienia nazwy plików i katalogów.
Faktycznie. Tylko jak dzisiaj rano próbówałem to nie zmieniało nazwy katalogu. Teraz oczywiście jest ok. :rolleyes:
// ale RenameFile jest tylko w Delphi jak się przesiądzie chłopak na WinApi to już nie będzie tej funkcji ;)
Użytkownik krajew4 edytował ten post 05 lipiec 2006, 20:34
Ale właśnie o to chodzi ze zmieniaja mi sie nazwy plikow ale katalogow juz nie. nie wyswietla mi sie zaden blad i nie wiem co teraz robic z tym
Faktycznie. Tylko jak dzisiaj rano próbówałem to nie zmieniało nazwy katalogu. Teraz oczywiście jest ok. :rolleyes:
// ale RenameFile jest tylko w Delphi jak się przesiądzie chłopak na WinApi to już nie będzie tej funkcji ;) Funkcja RenameFile() korzysta z MoveFile(), a to już jest w winapi :)
Ale właśnie o to chodzi ze zmieniaja mi sie nazwy plikow ale katalogow juz nie. nie wyswietla mi sie zaden blad i nie wiem co teraz robic z tym Sprawdziłeś, jakie nazwy katalogów są podawane do funkcji? :>
Użytkownik Cyrkiel edytował ten post 06 lipiec 2006, 00:19
pewnie zadam glupie pytanie ale jak to zrobic?
Cyrkiel masz rację :P SHFileOperation przegrywa z MoveFile na szybkości nawet. Sprawdzałem na 1000 plików i wyszło, że MoveFile jest ok. 2 razy szybsze :)
A jak tego użyć??
MoveFile('istniejacy katalog','nowa nazwa katalogu');
juz iwem ze katalogi byly troche inaczej podawane (np. [katalog]) ale juz to porawilem. Mimo to dalej nazwy nie chca sie zmieniac :((
POMOCY!!!
Lepiej dokładnie sprawdź parametry dla funkcji MoveFile, niemożliwe, że Ci nie działa.
wreszcie sie udalo. czasmi moja glupota nawet mnie zaskakuje. blad lezal po mojej stronie poniewaz do funkcji RenameFile jako pierwsz argument podawalem katalog tyle ze w postaci zawierającej na początku i koncu nazwy znaki [ i ] a dopiero w noej nazwie zostaly one usuniete. Czyli w praktyce zmienialem nazwe nieistniejacego katalogu :( glupi jestem. Z MoveFile tez dziala, wlasnie testuje szybkosc tej funkcji. Mam teraz jeszcze jedno pytanie:
jak usunac nadmiarowe spacje z nazwy, tzn. jezeli nazwa wyglada np. tak nazwa pliku, a chcialbym zeby wygladala tak: nazwa pliku??
Użytkownik salat25 edytował ten post 07 lipiec 2006, 16:31
s:=' foo foo '; s:=Trim(s); // s = 'foo'
Użytkownik krajew4 edytował ten post 07 lipiec 2006, 16:08
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
procedure zmiananazw; var sciezka,nowa,stara,nazwa,rozszerzenie:String; i,j,poczatek,k:LongInt; OldStr,NewStr:String; x:Real; begin Form1.Label2.Caption:='Wykonano: 0%'; X:=0; if FileExists(Form1.Edit1.Text) then Form1.autorzy.Items.LoadFromFile(Form1.Edit1.Text); try poczatek:=StrToInt(Form1.indeks.Text); except on EConvertError do ShowMessage('Podano zły indeks. Indeks musi by liczbą całkowitą dodatnią!'); end; k:=Form1.autorzy.Items.Count; Form1.ilosc.Show; OldStr:='_'; NewStr:=' '; Form1.Height:=550; Form1.ilosc.Top:=483; Form1.ilosc.Position:=0; Form1.ilosc.Max:=Form1.autorzy.Items.Count - poczatek; try for i:=poczatek to Form1.autorzy.Items.Count-1 do begin x:=(i+1)/(k)*100; Form1.Label2.Caption:='Wykonano: ' + FloatToStr(x) + '%'; sciezka:=Form1.glowna.Text + Form1.autorzy.Items[i]; Form1.ksiazki.Directory:=Form1.glowna.Text + Form1.autorzy.Items[i]; Form1.autorzy.ItemIndex:=i; for j:=0 to Form1.ksiazki.Items.Count-1 do begin stara:=sciezka + '\' + Form1.ksiazki.Items[j]; rozszerzenie:=RightStr(stara, 4); nazwa:=LeftStr(stara, Length(stara)-4); nowa:=StringReplace(nazwa, OldStr, NewStr, [rfReplaceAll]); RenameFile(sciezka + '\' + Form1.ksiazki.Items[j], nowa + rozszerzenie); end; end; x:=(i+1)/(k)*100; Form1.Label2.Caption:='Wykonano: ' + FloatToStr(x) + '%'; Form1.ilosc.Position:=Form1.ilosc.Position+1; end; except on EInOutError do ShowMessage('Wystąpił błąd przy próbie wczytania plików z katalogu: ' + Form1.autorzy.Items[i] + '. Prawdopodobnie podany katalog nie istnieje.'); end; ShowMessage('Zakończono'); end;
Zmienia on nazwy plików wyświetlanych w TFileBox, ale chciałbym też żeby zmieniał nazwy katalogów tam wyświetlanych. Jak można to zrobić??
Użytkownik salat25 edytował ten post 05 lipiec 2006, 16:57
Poczytaj o strukturze SHFILEOPSTRUCT i funkcji ShFileOperation.
Sprawdź debuggerem, czy nazwy katalogów w funkcji renamefile() są prawidłowe :)
Poczytaj o strukturze SHFILEOPSTRUCT i funkcji ShFileOperation. Po co? :>
Użytkownik Cyrkiel edytował ten post 05 lipiec 2006, 19:17
Po co? A RenameFile z tego co wiem nie zmiena nazwy plików tylko katalgów. Żeby zmienić nazwę katalogu ja był użył SHFileOperation.
Po co? A RenameFile z tego co wiem nie zmiena nazwy plików tylko katalgów. Żeby zmienić nazwę katalogu ja był użył SHFileOperation. RenameFile() zmienia nazwy plików i katalogów.
Faktycznie. Tylko jak dzisiaj rano próbówałem to nie zmieniało nazwy katalogu. Teraz oczywiście jest ok. :rolleyes:
// ale RenameFile jest tylko w Delphi jak się przesiądzie chłopak na WinApi to już nie będzie tej funkcji ;)
Użytkownik krajew4 edytował ten post 05 lipiec 2006, 20:34
Ale właśnie o to chodzi ze zmieniaja mi sie nazwy plikow ale katalogow juz nie. nie wyswietla mi sie zaden blad i nie wiem co teraz robic z tym
Faktycznie. Tylko jak dzisiaj rano próbówałem to nie zmieniało nazwy katalogu. Teraz oczywiście jest ok. :rolleyes:
// ale RenameFile jest tylko w Delphi jak się przesiądzie chłopak na WinApi to już nie będzie tej funkcji ;) Funkcja RenameFile() korzysta z MoveFile(), a to już jest w winapi :)
Ale właśnie o to chodzi ze zmieniaja mi sie nazwy plikow ale katalogow juz nie. nie wyswietla mi sie zaden blad i nie wiem co teraz robic z tym Sprawdziłeś, jakie nazwy katalogów są podawane do funkcji? :>
Użytkownik Cyrkiel edytował ten post 06 lipiec 2006, 00:19
pewnie zadam glupie pytanie ale jak to zrobic?
Cyrkiel masz rację :P SHFileOperation przegrywa z MoveFile na szybkości nawet. Sprawdzałem na 1000 plików i wyszło, że MoveFile jest ok. 2 razy szybsze :)
A jak tego użyć??
MoveFile('istniejacy katalog','nowa nazwa katalogu');
juz iwem ze katalogi byly troche inaczej podawane (np. [katalog]) ale juz to porawilem. Mimo to dalej nazwy nie chca sie zmieniac :((
POMOCY!!!
Lepiej dokładnie sprawdź parametry dla funkcji MoveFile, niemożliwe, że Ci nie działa.
wreszcie sie udalo. czasmi moja glupota nawet mnie zaskakuje. blad lezal po mojej stronie poniewaz do funkcji RenameFile jako pierwsz argument podawalem katalog tyle ze w postaci zawierającej na początku i koncu nazwy znaki [ i ] a dopiero w noej nazwie zostaly one usuniete. Czyli w praktyce zmienialem nazwe nieistniejacego katalogu :( glupi jestem. Z MoveFile tez dziala, wlasnie testuje szybkosc tej funkcji. Mam teraz jeszcze jedno pytanie:
jak usunac nadmiarowe spacje z nazwy, tzn. jezeli nazwa wyglada np. tak nazwa pliku, a chcialbym zeby wygladala tak: nazwa pliku??
Użytkownik salat25 edytował ten post 07 lipiec 2006, 16:31
s:=' foo foo '; s:=Trim(s); // s = 'foo'
Użytkownik krajew4 edytował ten post 07 lipiec 2006, 16:08