Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Удаление файлов


Автор: xz386 22.1.2007, 21:12
Здравствуйте я задавал вопрос по поводу удаления файлов помогли спасибо! А теперь надо удалить не один а несколько как это заделать???
Пробовал поставить  * за место имен не катит расскажите как это сделать???

Вот прошлый код

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
RemoveDir('c:\\temp');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DeleteFile('c:\\temp.txt');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
RenameFile('c:\\1.txt','c:\\qwe1.txt');
end;

end.



M
Alexeis
Модератор: выделяйте пожалуйста код http://forum.vingrad.ru/index.php?showtopic=126445

И указывайте в заголовке язык программирования.

Автор: Rodman 22.1.2007, 21:27
Код

{Удаление пустой директории
Чтобы удалить пустую директорию с помощью delphi достаточно обратиться к функции removedir.
function removedir(const dir: string): boolean;
Эта функция возвращает true если директория, указанная в единственном параметре, передаваемом в функцию, успешно удалена, в противном случае функция возвратит false.
Часто возникает необходимость удалить непустую папку, содержащую не только файлы, но и другие вложенные папки. Для этого была написана пользовательская функция, удаляющая папку со всеми файлами и поддиректориями. Вот она:}
function myremovedir(sdir : string) : boolean;
var
iindex : integer;
searchrec : tsearchrec;
sfilename : string;
begin
result := false;
sdir := sdir + '*.*';
iindex := findfirst(sdir, faanyfile, searchrec);
while iindex = 0 do begin
sfilename := extractfiledir(sdir)+''+searchrec.name;
if searchrec.attr = fadirectory then begin
if (searchrec.name <> '' ) and
(searchrec.name <> '.') and
(searchrec.name <> '..') then
myremovedir(sfilename);
end else begin
if searchrec.attr <> faarchive then
filesetattr(sfilename, faarchive);
if not deletefile(sfilename) then
showmessage('could not delete ' + sfilename);
end;
iindex := findnext(searchrec);
end;

findclose(searchrec);

removedir(extractfiledir(sdir));
result := true;
end;

//А сейчас пример использования этой функции:

procedure tform1.button1click(sender: tobject);
begin
if myremovedir('c:testdir') then showmessage('Директория успешно удалена')
else showmessage('Не получается удалить директорию');
end; 

Автор: Alexeis 22.1.2007, 21:55
в делфи не нужно дублировать слэши в путях к файлу, так как это делается в С++, используйте одинарные.

Автор: xz386 22.1.2007, 22:44
что то пробовал папки не рубит.

Автор: Rodman 22.1.2007, 23:08
вот еще нашел... попробуй...

Код

{Here's a Delphi procedure that can delete a file with the ability to undo by sending the file to the "Recycle Bin."

Function FileDeleteRB will return True if the operation was successful.

~~~~~~~~~~~~~~~~~~~~~~~~~}
uses ShellAPI;

function FileDeleteRB(
   AFileName:string): boolean;
var Struct: TSHFileOpStruct;
    pFromc: array[0..255] of char;
    Resultval: integer;
begin
   if not FileExists(AFileName) then begin
      Result := False;
      exit;
   end
   else begin
      fillchar(pfromc,sizeof(pfromc),0) ;
      StrPcopy(pfromc,expandfilename(AFileName)+#0#0) ;
      Struct.wnd := 0;
      Struct.wFunc := FO_DELETE;
      Struct.pFrom := pFromC;
      Struct.pTo := nil;
      Struct.fFlags:= FOF_ALLOWUNDO or FOF_NOCONFIRMATION
         or FOF_SILENT;
      Struct.fAnyOperationsAborted := false;
      Struct.hNameMappings := nil;
      Resultval := ShFileOperation(Struct) ;
      Result := (Resultval = 0) ;
   end;
end;


и 
Код

{The following function completely deletes a directory regardless of whether the directory is filled or has subdirectories. No confirmation is requested so be careful. If the operation is successful then True is returned, False otherwise.}

Usage

if DelTree('c:\TempDir') then
ShowMessage('Directory deleted!')
else
ShowMessage('Errors occured!') ;

//~~~~~~~~~~~~~~~~~~~~~~~~~}
uses ShellAPI;
Function DelTree(DirName : string): Boolean;
var
  SHFileOpStruct : TSHFileOpStruct;
  DirBuf : array [0..255] of char;
begin
  try
   Fillchar(SHFileOpStruct,Sizeof(SHFileOpStruct),0) ;
   FillChar(DirBuf, Sizeof(DirBuf), 0 ) ;
   StrPCopy(DirBuf, DirName) ;
   with SHFileOpStruct do begin
    Wnd := 0;
    pFrom := @DirBuf;
    wFunc := FO_DELETE;
    fFlags := FOF_ALLOWUNDO;
    fFlags := fFlags or FOF_NOCONFIRMATION;
    fFlags := fFlags or FOF_SILENT;
   end;
    Result := (SHFileOperation(SHFileOpStruct) = 0) ;
   except
    Result := False;
  end;
end;


Добавлено @ 23:20 
еще есть вариант с bat'ником...

прописать там 
Код

erase /Q имя_папки


а потом удалять уже пустую папку...

Автор: Rodman 22.1.2007, 23:55

xz386, не забудь пометить как решенный...

Автор: xz386 23.1.2007, 19:27
Всем Огромный Сенькс А так smile  но форум  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)