Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.04.2012, 22:05
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию Удаление файлов *.txt из папки Мои документы (Delphi))

Нужна помощь. Хочу дополнить свой код. Нужно, чтобы из папки "Мои документы" по нажатию кнопки удалялись все файлы с расширением *.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  
Старый 21.04.2012, 22:17
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

FindFirst, FindNext. В справке имеется пример использования.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 21.04.2012, 22:30
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию

А как можно применить их к моему примеру. Не могу никак разобраться. В справке написана общая информация.
Ответить с цитированием
  #4  
Старый 21.04.2012, 22:41
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Достаточно простой пример:
Код:
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;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
StudentMarat (21.04.2012)
  #5  
Старый 21.04.2012, 23:02
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию

Я попробовал применить функцию вот так:
Код:
 DeleteFiles('D:\Новая папка\*.txt');
Да, она удаляет из данной папки файлы с расширением *.txt

А как сделать так,чтобы удаляла из папки "Мои документы". В ручеую прописывать не вариант, т.к. папка "Мои документы" может быть настроена по разному. У меня на компе, к примеру, я её настроил на диск D. На других компах она может быть настроена по умолчанию при постановке винды, т.е. c:\Document and Setting\Имя пользователя\Мои документы.
Ответить с цитированием
  #6  
Старый 21.04.2012, 23:06
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от StudentMarat
SetLength(result, lStrLen(PChar(Result)));
Путь получен, добавь к нему маску удаляемого файла.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 21.04.2012, 23:08
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

Цитата:
Сообщение от StudentMarat
Как узнать путь к папке "Мои документы" я узнал. Вот код:
....
А как сделать так,чтобы удаляла из папки "Мои документы".

немножко напряч мозги =)
путь к папке документы знаем.
теперь
Код:
var path:string;
begin
path:=GetMyDoc;
и дальше в функцию удаления подставляешь свой path и FileMask ставишь *.txt
Ответить с цитированием
  #8  
Старый 21.04.2012, 23:09
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

angvelem опередил =)
Ответить с цитированием
  #9  
Старый 21.04.2012, 23:15
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию

Скорее всего, вот так, я правильно думаю:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteFiles(GetMyDoc+'\*.txt');
end;
Ответить с цитированием
  #10  
Старый 21.04.2012, 23:22
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

Цитата:
Сообщение от StudentMarat
Скорее всего, вот так, я правильно думаю:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteFiles(GetMyDoc+'\*.txt');
end;
нет. надо все файлы по имени перебирать да и зачем такое спрашивать если можно попробовать самому это вначале сделать?)

Последний раз редактировалось Snake22, 21.04.2012 в 23:27.
Ответить с цитированием
  #11  
Старый 21.04.2012, 23:27
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию

Цитата:
Сообщение от Snake22
нет. надо все файлы по имени перебирать.

У меня по заданию нужно, чтобы все файлы с расширением *.txt из папки Мои документы удалялись. И я только что попробовал сделать вот так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteFiles(GetMyDoc+'\*.txt');
end;
И у меня все работает. Не знаю, может есть еще другой способ???????
Ответить с цитированием
  #12  
Старый 21.04.2012, 23:27
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

если интересует способ без переобора то через 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  
Старый 21.04.2012, 23:31
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

Цитата:
Сообщение от StudentMarat
Цитата:
Сообщение от Snake22
нет. надо все файлы по имени перебирать.
У меня по заданию нужно, чтобы все файлы с расширением *.txt из папки Мои документы удалялись. И я только что попробовал сделать вот так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteFiles(GetMyDoc+'\*.txt');
end;
И у меня все работает. Не знаю, может есть еще другой способ???????
Тьфу ты! извиняюсь ,перепутал стандартную функцию DeleteFile с пользовательской DeleteFileS
Ответить с цитированием
  #14  
Старый 21.04.2012, 23:35
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию

Цитата:
Сообщение от Snake22
если интересует способ без переобора то через 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;

т.е. здесь в Uses нужно добавить ShellApi.
Компилятор у меня ругается на Wnd. Что нужно сделатьЮ чтобы не ругался????
Ответить с цитированием
  #15  
Старый 21.04.2012, 23:37
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

Цитата:
Сообщение от StudentMarat
т.е. здесь в Uses нужно добавить ShellApi.
Компилятор у меня ругается на Wnd. Что нужно сделатьЮ чтобы не ругался????
Да ShellAPI в uses.
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)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025