![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Нужна помощь. Хочу дополнить свой код. Нужно, чтобы из папки "Мои документы" по нажатию кнопки удалялись все файлы с расширением *.txt. 
		
	
		
		
		
		
		
	
		
		
	
	
	Как узнать путь к папке "Мои документы" я узнал. Вот код: Код: 
	//Сначала добавить в Uses ActiveX, ShlObj;
 //Узнать папку Мои документы
function GetMyDoc : string;
var
  SpecialDir: PItemIdList;
begin
    SetLength(result, MAX_PATH);
    SHGetSpecialFolderLocation(Form1.Handle, CSIDL_PERSONAL, SpecialDir);
    SHGetPathFromIDList(SpecialDir, PChar(Result));
    SetLength(result, lStrLen(PChar(Result)));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(GetMyDoc);
end;Как теперь можно из папки "Мои документы" удались файлы с расширением *.txt ???????  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 FindFirst, FindNext. В справке имеется пример использования. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 А как можно применить их к моему примеру. Не могу никак разобраться. В справке написана общая информация. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Достаточно простой пример: 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Код: 
	function DeleteFiles(const FileMask : String) : Boolean;
var
  SRec : TSearchRec;
  Path : String;
begin
  Result := FindFirst(FileMask, faAnyFile, SRec) = 0;
  if not Result then
    exit;
  try
    Path := ExtractFilePath(FileMask);
    Repeat
      if (SRec.Name <> '') and (SRec.Name  <> '.') and (SRec.Name <> '..') and
        (SRec.Attr and (faVolumeID + faDirectory) = 0) then
      begin
        Result := DeleteFile(Path + SRec.Name);
        if not Result then
          break;
      end;
    Until FindNext(SRec) <> 0;
  finally
    FindClose(SRec);
  end;
end; | 
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
 
StudentMarat (21.04.2012)
  | ||
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Я попробовал применить функцию вот так: 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	 DeleteFiles('D:\Новая папка\*.txt');А как сделать так,чтобы удаляла из папки "Мои документы". В ручеую прописывать не вариант, т.к. папка "Мои документы" может быть настроена по разному. У меня на компе, к примеру, я её настроил на диск D. На других компах она может быть настроена по умолчанию при постановке винды, т.е. c:\Document and Setting\Имя пользователя\Мои документы.  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
  | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 немножко напряч мозги =) путь к папке документы знаем. теперь Код: 
	var path:string; begin path:=GetMyDoc;  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 angvelem опередил =) 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Скорее всего, вот так, я правильно думаю: 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	procedure TForm1.Button1Click(Sender: TObject); begin DeleteFiles(GetMyDoc+'\*.txt'); end;  | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Последний раз редактировалось Snake22, 21.04.2012 в 23:27.  | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 У меня по заданию нужно, чтобы все файлы с расширением *.txt из папки Мои документы удалялись. И я только что попробовал сделать вот так: Код: 
	procedure TForm1.Button1Click(Sender: TObject); begin DeleteFiles(GetMyDoc+'\*.txt'); end;  | 
| 
		 
			 
			#12  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 если интересует способ без переобора то через ShellAIP 
		
	
		
		
		
		
		
		
			Код: 
	function Recycle( FileName: string): Boolean;
var
  FileOp: TSHFileOpStruct;
begin
  FillChar(FileOp, SizeOf(FileOp), 0); 
  FileOp.Wnd := Application.Handle;
  FileOp.wFunc := FO_DELETE;
  FileOp.pFrom := PChar(FileName);
  FileOp.fFlags := FOF_NOERRORUI or FOF_NOCONFIRMATION;
  FileOp.fAnyOperationsAborted:=true;
  Result := (SHFileOperation(FileOp) = 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Recycle('C:\tmp\*.txt'#0);
end;Последний раз редактировалось Snake22, 21.04.2012 в 23:33.  | 
| Этот пользователь сказал Спасибо Snake22 за это полезное сообщение: | ||
 
StudentMarat (21.04.2012)
  | ||
| 
		 
			 
			#13  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
  | 
| 
		 
			 
			#14  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 т.е. здесь в Uses нужно добавить ShellApi. Компилятор у меня ругается на Wnd. Что нужно сделатьЮ чтобы не ругался????  | 
| 
		 
			 
			#15  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 wnd вообще можно удалить.это так я со своего примера копировал,там он нужен был мне. Код: 
	function Recycle( FileName: string): Boolean; var FileOp: TSHFileOpStruct; begin FillChar(FileOp, SizeOf(FileOp), 0); FileOp.Wnd := Application.Handle; FileOp.wFunc := FO_DELETE; FileOp.pFrom := PChar(FileName); FileOp.fFlags := FOF_NOERRORUI or FOF_NOCONFIRMATION; FileOp.fAnyOperationsAborted:=true; Result := (SHFileOperation(FileOp) = 0); end;  | 
| Этот пользователь сказал Спасибо Snake22 за это полезное сообщение: | ||
 
StudentMarat (21.04.2012)
  | ||