Ĺadny brzuch
Pisze program do czyszczenia roznych smieci z komputera... niestety program usuwa same pliki bez folderow z katalogow takich jak np. historia, temporary internet files itd. Co zrobic zeby program usuwal takze foldery? :(
procedure usunPliki(sciezka, typ : string);
var
rec : TSearchRec;
i : integer;
begin
i := FindFirst(sciezka + typ, faAnyFile, rec);
while i = 0 do
begin
DeleteFile(sciezka + rec.Name);
i := FindNext(rec);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if lHistoria.Caption = 'Nieznany' then
exit;
if MessageDlg('Czy wyczyścić zawartość folderu Historia?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes then
begin
usunPliki(lHistoria.Caption, '*.*');
wyswietlDaneDysku;
end;
end;
To jest moj pierwszy program dlatego mam tak malo pojecia o tym
Bede bardzo wdzieczny za poprawne przerobienie tego kodu i pokazanie go tutaj na forum tak abym mogl wykorzystac go pozniej w swoim programie :)
www.pajacyk.pl
pozdrawiam
Do skasowania katalogu możesz użyć funkcji RemoveDir(nazwa_katalogu) - tylko dany katalog musi być pusty.
ICQ : 245-363-570
TLEN: oxisoft
Oxi po co tak się rozpisywać ;) RmDir('Nazwa katalogu');
//----------------------
z_forum_experta@beldzio.com
www.beldzio.com
www.beldzio.com/forum
gg :3183960
cytat:Bełdzio napisał:
Oxi po co tak się rozpisywać ;) RmDir('Nazwa katalogu');
Masz rację - trzeba być oszczędnym w kodzie ;)
ICQ : 245-363-570
TLEN: oxisoft
A co mam zrobic gdy chcialbym usunac tylko z danego katalogu pliki np .lnk i wszystkie foldery:?, pozostawiajac tym samym caly katalog z reszta plikow... Moglby ktos przerobic wyzej napisany kod tak zeby mozna kogo skopiowac od razu do delphi:?....
www.pajacyk.pl
pozdrawiam
Pomoze ktos?:(:?
--------------------------------------------------------------------------------
pozdrawiam
Ja poszukam źródła na swoim dysku... :) na www.4programmers.net było chyba a jak nie to na google poszukaj sobie źródeł na zaganicznych stronach - dopuki nie znajde 8)
Anonymous AdSoftadsoftt@o2.pl
gg:2283189
Szukalem chyba wszedzie....:(
-------------------------
pozdrawiam
Z tego co zrozumiałem to wydaje mi się, że powinieneś zrobić coś takiego:
1. Przeszukać dany folder i sprawdzić czy nie znajdują się w nim jeszcze inne podfoldery(faDirectory).
2. Utworzyć zmienną TStrings i do niej dodawać nazwy folderów, które znalazłeś.
3. Teraz kolejno sprawdzać każdy z tych folderów czy w nim nie znajdują się jeszcze inne podfoldery. Jeśli tak to powtarzasz czynności z kolejnymi folderami, jeśli nie to usuwasz wszystkie pliki.
4. Przechodzisz do kolejnego folderu ze zmiennej TStrings i powtarasz czynności z punktu 3.
5. Teraz kiedy wszystkie foldery są puste to usuwasz je.
6. Na końcu usuwasz ze swojego folderu początkowego pliki *.lnk i problem rozwiązany.
Myślę, że to o to chodziło i że mnie zrozumiałeś. Napisanie takiego kodu nie powinno być dla Cibie chyba trudne.
Jak skasować katalog:
[code]
uses FileCtrl;
function DelDir( dir : String ) : Boolean;
procedure DoDeleteDirectory( const dir, path : String; var Result : Boolean );
var
SR : TSearchRec;
Found : Integer;
source : String;
begin
if not DirectoryExists( dir ) then
Exit;
source := dir + path;
Found := FindFirst( source+'*.*', faAnyFile, SR );
try
while (Found = 0) do
begin
if (SR.Name<>'.') and (SR.Name <> '..') then
begin
if (SR.Attr and faDirectory) <> 0 then
begin
DoDeleteDirectory( dir, path+''+SR.Name, Result );
end
else
begin
FileSetAttr( source+''+SR.Name, FileGetAttr(source+''+SR.Name) and
not (faReadOnly or faHidden) );
if not DeleteFile( source+''+SR.Name ) then
result := False;
end;
end;
Found := FindNext( SR );
end;
finally
FindClose(SR);
end;
RemoveDir( source );
end;
begin
DoDeleteDirectory( dir, '', result );
end;
[code]
Jak skopiować, przenieść, usunąć, zmienić nazwę pliku lub katalogu:
[code]
uses ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
var Rekord:TSHFileOpStructA;
begin
with Rekord do
begin
Wnd:=Handle;
wFunc:=FO_COPY;
pFrom:='c:windowswin.ini';
pTo:='c:winwin.ini';
fFlags:=FOF_NOCONFIRMMKDIR;
end;
if SHFileOperation(Rekord)<>0 then
ShowMessage('Błąd')
end;
Parametrem wFunc mogą być
FO_COPY - kopiuje z pFrom do pTo
FO_DELETE - kasuje pFrom (pTo jest ignorowane)
FO_MOVE - przenosi z pFrom do pTo
FO_RENAME - zmienia nazwę z pFrom do pTo
Informacje o parametrach fFlags są w pomocy Win32 Programmer's Reference pod hasłem SHFILEOPSTRUCT [code]
Usuwa folder z zawartością:
[code]
function DeleteDirectory( const dir, path : string) : Boolean;
var
SR : TSearchRec;
Found : Integer;
source : string;
begin
source := dir + path;
Found := FindFirst( source+'*.*', faAnyFile, SR );
try
while (Found = 0) do
begin
if (SR.name<>'.') and (SR.name <> '..') then
begin
if (SR.Attr and faDirectory) <> 0 then
begin
DeleteDirectory( dir, path+''+SR.name );
end
else
begin
FileSetAttr(
source+''+SR.name, FileGetAttr(source+''+SR.name)
and
not (faReadOnly or faHidden) );
if not DeleteFile( source+''+SR.name ) then
Result := False;
end;
end;
Found := FindNext( SR );
end;
finally
FindClose(SR);
end;
RemoveDir( source );
end;
wykorzystanie funkcji: DeleteDirectory('C:','WindowsPulpita');
[code]
Usuwanie katlogu lub pliku do kosza ułatwia nam Win32 API dzięki funkcji shFileOperation(). Oto gotowa procedura:
[code]
procedure ToRecycle(AHandle : THandle;AFileName : TString);
var
SHFileOpStruct: TSHFileOpStruct;
begin
with SHFileOPStruct do
begin
Wnd := AHandle;
wFunc := FO_DELETE;
pFrom := PChar(AFileName);
fFlags := FOF_ALLOWUNDO;
end;
SHFileOperation(SHFileOpStruct);
end;
[code]
Anonymous AdSoftadsoftt@o2.pl
gg:2283189
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
procedure usunPliki(sciezka, typ : string);
var
rec : TSearchRec;
i : integer;
begin
i := FindFirst(sciezka + typ, faAnyFile, rec);
while i = 0 do
begin
DeleteFile(sciezka + rec.Name);
i := FindNext(rec);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if lHistoria.Caption = 'Nieznany' then
exit;
if MessageDlg('Czy wyczyścić zawartość folderu Historia?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes then
begin
usunPliki(lHistoria.Caption, '*.*');
wyswietlDaneDysku;
end;
end;
To jest moj pierwszy program dlatego mam tak malo pojecia o tym
Bede bardzo wdzieczny za poprawne przerobienie tego kodu i pokazanie go tutaj na forum tak abym mogl wykorzystac go pozniej w swoim programie :)
www.pajacyk.pl
pozdrawiam
Do skasowania katalogu możesz użyć funkcji RemoveDir(nazwa_katalogu) - tylko dany katalog musi być pusty.
ICQ : 245-363-570
TLEN: oxisoft
Oxi po co tak się rozpisywać ;) RmDir('Nazwa katalogu');
//----------------------
z_forum_experta@beldzio.com
www.beldzio.com
www.beldzio.com/forum
gg :3183960
cytat:Bełdzio napisał:
Oxi po co tak się rozpisywać ;) RmDir('Nazwa katalogu');
Masz rację - trzeba być oszczędnym w kodzie ;)
ICQ : 245-363-570
TLEN: oxisoft
A co mam zrobic gdy chcialbym usunac tylko z danego katalogu pliki np .lnk i wszystkie foldery:?, pozostawiajac tym samym caly katalog z reszta plikow... Moglby ktos przerobic wyzej napisany kod tak zeby mozna kogo skopiowac od razu do delphi:?....
www.pajacyk.pl
pozdrawiam
Pomoze ktos?:(:?
--------------------------------------------------------------------------------
pozdrawiam
Ja poszukam źródła na swoim dysku... :) na www.4programmers.net było chyba a jak nie to na google poszukaj sobie źródeł na zaganicznych stronach - dopuki nie znajde 8)
Anonymous AdSoftadsoftt@o2.pl
gg:2283189
Szukalem chyba wszedzie....:(
-------------------------
pozdrawiam
Z tego co zrozumiałem to wydaje mi się, że powinieneś zrobić coś takiego:
1. Przeszukać dany folder i sprawdzić czy nie znajdują się w nim jeszcze inne podfoldery(faDirectory).
2. Utworzyć zmienną TStrings i do niej dodawać nazwy folderów, które znalazłeś.
3. Teraz kolejno sprawdzać każdy z tych folderów czy w nim nie znajdują się jeszcze inne podfoldery. Jeśli tak to powtarzasz czynności z kolejnymi folderami, jeśli nie to usuwasz wszystkie pliki.
4. Przechodzisz do kolejnego folderu ze zmiennej TStrings i powtarasz czynności z punktu 3.
5. Teraz kiedy wszystkie foldery są puste to usuwasz je.
6. Na końcu usuwasz ze swojego folderu początkowego pliki *.lnk i problem rozwiązany.
Myślę, że to o to chodziło i że mnie zrozumiałeś. Napisanie takiego kodu nie powinno być dla Cibie chyba trudne.
Jak skasować katalog:
[code]
uses FileCtrl;
function DelDir( dir : String ) : Boolean;
procedure DoDeleteDirectory( const dir, path : String; var Result : Boolean );
var
SR : TSearchRec;
Found : Integer;
source : String;
begin
if not DirectoryExists( dir ) then
Exit;
source := dir + path;
Found := FindFirst( source+'*.*', faAnyFile, SR );
try
while (Found = 0) do
begin
if (SR.Name<>'.') and (SR.Name <> '..') then
begin
if (SR.Attr and faDirectory) <> 0 then
begin
DoDeleteDirectory( dir, path+''+SR.Name, Result );
end
else
begin
FileSetAttr( source+''+SR.Name, FileGetAttr(source+''+SR.Name) and
not (faReadOnly or faHidden) );
if not DeleteFile( source+''+SR.Name ) then
result := False;
end;
end;
Found := FindNext( SR );
end;
finally
FindClose(SR);
end;
RemoveDir( source );
end;
begin
DoDeleteDirectory( dir, '', result );
end;
[code]
Jak skopiować, przenieść, usunąć, zmienić nazwę pliku lub katalogu:
[code]
uses ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
var Rekord:TSHFileOpStructA;
begin
with Rekord do
begin
Wnd:=Handle;
wFunc:=FO_COPY;
pFrom:='c:windowswin.ini';
pTo:='c:winwin.ini';
fFlags:=FOF_NOCONFIRMMKDIR;
end;
if SHFileOperation(Rekord)<>0 then
ShowMessage('Błąd')
end;
Parametrem wFunc mogą być
FO_COPY - kopiuje z pFrom do pTo
FO_DELETE - kasuje pFrom (pTo jest ignorowane)
FO_MOVE - przenosi z pFrom do pTo
FO_RENAME - zmienia nazwę z pFrom do pTo
Informacje o parametrach fFlags są w pomocy Win32 Programmer's Reference pod hasłem SHFILEOPSTRUCT [code]
Usuwa folder z zawartością:
[code]
function DeleteDirectory( const dir, path : string) : Boolean;
var
SR : TSearchRec;
Found : Integer;
source : string;
begin
source := dir + path;
Found := FindFirst( source+'*.*', faAnyFile, SR );
try
while (Found = 0) do
begin
if (SR.name<>'.') and (SR.name <> '..') then
begin
if (SR.Attr and faDirectory) <> 0 then
begin
DeleteDirectory( dir, path+''+SR.name );
end
else
begin
FileSetAttr(
source+''+SR.name, FileGetAttr(source+''+SR.name)
and
not (faReadOnly or faHidden) );
if not DeleteFile( source+''+SR.name ) then
Result := False;
end;
end;
Found := FindNext( SR );
end;
finally
FindClose(SR);
end;
RemoveDir( source );
end;
wykorzystanie funkcji: DeleteDirectory('C:','WindowsPulpita');
[code]
Usuwanie katlogu lub pliku do kosza ułatwia nam Win32 API dzięki funkcji shFileOperation(). Oto gotowa procedura:
[code]
procedure ToRecycle(AHandle : THandle;AFileName : TString);
var
SHFileOpStruct: TSHFileOpStruct;
begin
with SHFileOPStruct do
begin
Wnd := AHandle;
wFunc := FO_DELETE;
pFrom := PChar(AFileName);
fFlags := FOF_ALLOWUNDO;
end;
SHFileOperation(SHFileOpStruct);
end;
[code]
Anonymous AdSoftadsoftt@o2.pl
gg:2283189