Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2015, 16:25   #1
marales
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 22
По умолчанию поиск файлов по дате создания и по маске

подскажите где ошибка
Ищу файлы по маске '*.txt' по всем имеющимся дискам
Хотел добавить, чтобы ещё фильтровалось по дате создания например например найти файлы txt с датой создания больше 16.09.2015
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,masks;

type
  TForm1 = class(TForm)
    List: TListBox;
    ListBox1: TListBox;
    Button2: TButton;
    procedure GetFixedDriveList;
    procedure FindFiles(Path, Mask: string; List: TStrings; IncludeSubDir: Boolean = True);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure Tform1.GetFixedDriveList;
var
    Size, Pos: Cardinal;
    Buffer: array[0..127] of AnsiChar;
    P: PChar;
begin
    form1.List.Update;
  try
      form1.List.Clear;
      Size:=GetLogicalDriveStrings(SizeOf(Buffer), Buffer);
      Pos:=0;
      while Pos<Size do begin
          P:=@Buffer[Pos];
          if GetDriveType(P) = DRIVE_FIXED then form1.List.Items.Add(p);
      while Buffer[Pos]<>#0 do Inc(Pos);
          Inc(Pos);
  end;
  finally
      form1.List.Update;
end;
end;


procedure Tform1.FindFiles(Path, Mask: string; List: TStrings; IncludeSubDir: Boolean = True);
var
  SearchRec: TSearchRec;
  FindResult: Integer;
  datetime:TDateTime;
begin
  form1.ListBox1.Update;
  try
    Path:=IncludeTrailingBackSlash(Path);
    FindResult:=FindFirst(Path+'*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do with SearchRec do begin
        if (Attr and faDirectory<>0) then begin
            if IncludeSubDir and (Name<>'..') and (Name<>'.') then
                  FindFiles(Path+Name, Mask, List, IncludeSubDir);
            end else begin
        if MatchesMask(Name, Mask) then
              begin
              datetime:=FileDateToDateTime(SearchRec.Time);
              if datetime>16/09/2015 then List.Add(Path+Name);
              end;
        end;
    FindResult:=FindNext(SearchRec);
    end;
    finally
        FindClose(SearchRec);
  end;
  finally
    form1.ListBox1.Update;
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
for i:=0 to form1.list.items.count-1 do
   FindFiles(List.Items[i],'*.txt',ListBox1.Items,True);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
GetFixedDriveList;
end;

end.
marales вне форума Ответить с цитированием
Старый 18.09.2015, 16:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
datetime>16/09/2015
Что это?
Нужно уж так делать:
Код:
datetime>EncodeDate(2015,09,16);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.09.2015, 00:33   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Очень забавно наблюдать эти неизвестно для чего вызываемые TWinControl.Update в начале работы и затем повторяемые в секции finally. Чтобы это значило?

А в целом я согласен что Дельфи такая недоделанная, ну просто ужас! Не может понять простую строчку
Код:
datetime>16/09/2015
. Ведь даже любой дурак понимает что она означает.

Последний раз редактировалось Stilet; 19.09.2015 в 09:18.
northener вне форума Ответить с цитированием
Старый 19.09.2015, 13:53   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Очень забавно наблюдать эти неизвестно для чего вызываемые TWinControl.Update в начале работы и затем повторяемые в секции finally. Чтобы это значило?
это обычно означает, что говнокод спионерен из интернетов чуть менее, чем полностью, причём сам пионер не понимает, как он работает.


совет: пионер, тыришь – тырь вагонами!
Вложения
Тип файла: rar FindFile.rar (9.7 Кб, 45 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.09.2015, 14:11   #5
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
совет: пионер, тыришь – тырь вагонами!
Думаю данная фраза имеет историческую оценку. Теперь я понимаю, почему в современном мире коррупция буквально везде.

Алгоритм следующий:
1. Ищем файл.
2. Проверяем его расширение(GetFileExt), если оно равно "txt", то продолжаем, иначе вернутся к действию 1.
3. Проверяем его дату создания(Там надо через атрибуты(Attribute) файла или типо того), если она больше или равна данному, то возвращаемся к действию 1, иначе записываем в список.
4. Вернутся к действию 1.
Юзаем FindFirst, FindNext, FindClose, TSearchRec и GetFileAttribute.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 19.09.2015, 14:24   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Думаю данная фраза имеет историческую оценку. Теперь я понимаю, почему в современном мире коррупция буквально везде.
ай шайтан, слющяй, как догадался?



Цитата:
Алгоритм следующий:
1. берешь компонент.
2. устанавливаешь его в поллитру компонентов.
3. кидаешь на форму и юзаешь.
Изображения
Тип файла: png 281692.png (76.7 Кб, 135 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.09.2015, 17:27   #7
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
ай шайтан, слющяй, как догадался?



1. берешь компонент.
2. устанавливаешь его в поллитру компонентов.
3. кидаешь на форму и юзаешь.
По верхней: Книги читаю много. + Учил историю.

По компоненту: Надо же. Уже даже компонент поиска файлов есть. Смотрите не разленитесь, с такими средствами.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 19.09.2015, 17:37   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Надо же. Уже даже компонент поиска файлов есть. Смотрите не разленитесь, с такими средствами.
Причём тут лень? Чо б время не сэкономить? Жизнь-то одна.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 20.09.2015, 13:59   #9
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Минай, судя по тому что у ватора темы нет в секции uses юнитов в преффиксами Vcl. она работает в "блокноте" для программирования (Делфи 7), а не в профессиональном расширенном приложении ХЭ8.
Stilet
Цитата:
EncodeDate(2015,09,16);
от этой функции я отказался по простой причине, если в неёё всунуть 13 месяц или 32 число она тупо выдаёт ексепшэн.
Лучше уже d:= StrToDateTimeDef(formatfloat('00',1 6)+':'+formatfloat('00',09)+':'+for matfloat('0000',2015),Now());
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 20.09.2015, 14:04   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Минай, судя по тому что у ватора темы нет в секции uses юнитов в преффиксами Vcl. она работает в "блокноте" для программирования (Делфи 7), а не в профессиональном расширенном приложении ХЭ8.
И чо?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск текстовых файлов по дате создания и загрузка их в Memo Julia2 Общие вопросы C/C++ 0 26.02.2015 20:00
Поиск файлов по маске kholoshchak Общие вопросы Delphi 7 31.10.2013 16:46
Поиск файлов по маске и нахождения общего размера найденных файлов и вывод в терминал Колямбий Помощь студентам 0 21.04.2013 21:31
Случайный поиск файлов по маске Armatus Общие вопросы C/C++ 8 13.04.2011 16:51