Avatar billede pham Nybegynder
12. oktober 2000 - 21:01 Der er 4 kommentarer og
1 løsning

Slette Et blibliotek med under biblioteker og filer i

hvordan sletter jeg et blibliotek med under biblioteker og filer i ???

Avatar billede picard Nybegynder
12. oktober 2000 - 21:05 #1

var DirInfo: TSearchRec;
    r : Integer; begin r := FindFirst(\'C:\\Download\\Test\\*.*\', FaAnyfile, DirInfo); while r = 0 do begin if ((DirInfo.Attr and FaDirectory <> FaDirectory) and (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then if DeleteFile(pChar(\'C:\\Download\\test\\\' + DirInfo.Name)) = false then ShowMessage(\'Unable to delete : C:\\Download\\test\\\' + DirInfo.Name); r := FindNext(DirInfo); end; SysUtils.FindClose(DirInfo); if RemoveDirectory(\'C:\\Download\\Test\') = false then ShowMessage(\'Unable to delete direcotry : C:\\Download\\test\'); end;

Avatar billede dj Nybegynder
12. oktober 2000 - 21:12 #2
Prøv dette:

----------------

Uses FileCTRL;

Procedure DelDir(dir:string);
var
  SearchRec: TSearchRec;
begin
  If Copy(dir,Length(dir),1)<>\'\\\' then dir:=dir+\'\\\';
  IF not DirectoryExists(dir) then begin
  showmessage(\'biblioeket \"\'+dir+\'\" findes ikke!\');
  exit;
  end;
  If FindFirst(dir+\'*.*\', faAnyFile, SearchRec)=0 Then
  Repeat
    If SearchRec.Attr=faDirectory Then begin
      If (SearchRec.Name=\'.\')or(SearchRec.Name=\'..\') then Continue;
      //loop igennem underbibliotekerne (recursive)
      DelDir(dir+SearchRec.Name);
    end else begin
      //Gør et eller andet med filerne fundet i biblioteket
      DeleteFile(dir+SearchRec.Name);
    end;
  until FindNext(SearchRec) <> 0;
  //Slet Bibliotek
  removedir(dir+SearchRec.Name);
  FindClose(SearchRec);
end;

------------------

Mvh. _DJ_
Avatar billede picard Nybegynder
12. oktober 2000 - 21:12 #3
ups blev ikke helt færdig med ovenstående kode
forsøger igen!

UDDRAG FRA DELPHISEEK.COM

procedure TForm .Button Click(Sender: TObject); var DirInfo: TSearchRec;
    r : Integer;

Begin
  r := FindFirst(\'C:\\Download\\Test\\*.*\',    FaAnyfile, DirInfo);
  while r = 0 do
  begin
    if ((DirInfo.Attr and  FaDirectory <>  FaDirectory) and (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
  if DeleteFile(pChar(\'C:\\Download\\test\\\' + DirInfo.Name)) = false then
  ShowMessage(\'Unable to delete : C:\\Download\\test\\\' + DirInfo.Name);
  r := FindNext(DirInfo); end; SysUtils.FindClose(DirInfo);
  if RemoveDirectory(\'C:\\Download\\Test\') = false then
  ShowMessage(\'Unable to delete direcotry : C:\\Download\\test\');
end;

du kan selvfølgelig også kalde deltree
winexec(......\\deltree \"bibliotek der skal slettes\",1)
dog er det ikke særlig pænt at bruge DOS kald så jeg foretrækker den anden

Picard

ps. Det er lidt rodet, JEG VED DET GODT ;)



Avatar billede delphidaner Nybegynder
13. oktober 2000 - 07:54 #4
DJ >> I stedet for:

If Copy(dir,Length(dir),1)<>\'\\\' then dir:=dir+\'\\\';

så kan man skrive:

Dir := IncludeTrailingBackslash(Dir);

Der findes en tilsvarende ExcludeTrailingBackslash funktion.

Det er selvfølgelig kun en bagatel, men lidt nemmere at skrive.
Avatar billede borrisholt Novice
13. oktober 2000 - 08:38 #5
lidt i tråd med de allerede givne svar vil jeg anbefale det følgende :

unit FileHandling;

interface

uses
  ShellAPI, Windows, SysUtils;
Function DeleteFiles(  Files : String) : Boolean;
Function CopyFiles( From, Dest : String) : Boolean;
Function MoveFiles( From, Dest : String) : Boolean;
Function RenameFiles( From, Dest : String) : Boolean;
Function GetFileSize(FileName : TFileName) : Integer;




implementation

Function ExecuteOp(From : String; Dest : String; IdOp : Integer) : Boolean;
var
  SHFileOpStruct : TSHFileOpStruct;
  zFrom, zDest : array [0..MAX_PATH+2] of Char;
begin
  From := ExpandFileName(From);
  Dest := ExpandFileName(Dest);
  ZeroMemory(@zFrom, SizeOf(zFrom));
  ZeroMemory(@zDest, SizeOf(zDest));

  StrCopy(zFrom, PChar(From));
  StrCopy(zDest, PChar(Dest));

  SHFileOpStruct.Wnd  := GetActiveWindow();
  SHFileOpStruct.wFunc := IdOp;
  SHFileOpStruct.pFrom := zFrom;
  SHFileOpStruct.pTo  := zDest;

  if IdOp <> FO_DELETE then
    SHFileOpStruct.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR
  else
    SHFileOpStruct.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;

Result := Boolean(SHFileOperation(SHFileOpStruct));
Result := Result and (SHFileOpStruct.fAnyOperationsAborted);
end;


Function CopyFiles( From, Dest : String) : Boolean;
begin
  result := ExecuteOp(From,Dest, FO_COPY);
end;

Function DeleteFiles(  Files : String) : Boolean;
begin
  Result := ExecuteOp(Files,\'\', FO_DELETE);
end;

Function MoveFiles( From, Dest : String) : Boolean;
begin
  Result := ExecuteOp(From,Dest, FO_MOVE);
end;

Function RenameFiles( From, Dest : String) : Boolean;
begin
  if (ExtractFilePath(From) <> \'\') and (ExtractFilePath(Dest) = \'\') then
    Dest := ExtractFilePath(From) + Dest;
  Result := ExecuteOp(From,Dest, FO_RENAME);
end;


Function GetFileSize(FileName : TFileName) : Integer;
var
SearchRec : TSearchRec;
begin
  if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then
    Result := SearchRec.Size
  else
    Result := -1;
  FindClose (SearchRec);
end;

end.

du kalder så funktionen DeleteFiles(\'C:\\\');

Jens B
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester