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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 21.11.2012, 22:16
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

На, не мучайся, за тебя уже все сделали.

http://www.delphisources.ru/pages/fa...arch_file.html
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #17  
Старый 21.11.2012, 22:18
Аватар для MoS
MoS MoS вне форума
Прохожий
 
Регистрация: 21.11.2012
Сообщения: 29
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
На, не мучайся, за тебя уже все сделали.

http://www.delphisources.ru/pages/fa...arch_file.html
спс, буду разбираться
Ответить с цитированием
  #18  
Старый 21.11.2012, 22:19
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Или вот еще http://www.delphisources.ru/forum/sh...376#post116376, создавал подобную тему на форуме, добавляет в листбокс все файлы с папок и подпапок.
Ответить с цитированием
  #19  
Старый 21.11.2012, 22:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Или ешё.
Код:
procedure FindFiles(const Path : String);
var
  SR  : TSearchRec;
  Ext : String;
begin
  if FindFirst(ExpandFileName(Path + '\*.*'), faAnyFile, SR) = 0 then
  try
    repeat
      if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
        FindFiles(ExpandFileName(Path + '\' + SR.Name))
      else if (SR.Name[1] <> '.') then
        ListBox1.Items.Add(SR.Name);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #20  
Старый 21.11.2012, 23:19
Аватар для MoS
MoS MoS вне форума
Прохожий
 
Регистрация: 21.11.2012
Сообщения: 29
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Или ешё.
Код:
procedure FindFiles(const Path : String);
var
  SR  : TSearchRec;
  Ext : String;
begin
  if FindFirst(ExpandFileName(Path + '\*.*'), faAnyFile, SR) = 0 then
  try
    repeat
      if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
        FindFiles(ExpandFileName(Path + '\' + SR.Name))
      else if (SR.Name[1] <> '.') then
        ListBox1.Items.Add(SR.Name);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
Спасибо, именно этот код очень помог!
Ответить с цитированием
  #21  
Старый 22.11.2012, 23:44
Аватар для MoS
MoS MoS вне форума
Прохожий
 
Регистрация: 21.11.2012
Сообщения: 29
Версия Delphi: 7
Репутация: 10
По умолчанию

Код:
procedure FindFiles(const Path : String);
var
  SR  : TSearchRec;
  Ext : String;
begin
  if FindFirst(ExpandFileName(Path + '\*.*'), faAnyFile, SR) = 0 then
  try
    repeat
      if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
        FindFiles(ExpandFileName(Path + '\' + SR.Name))
      else if (SR.Name[1] <> '.') then
        ListBox1.Items.Add(SR.Name);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;

возник вопрос, почему в этом коде при указании маски допустим *.txt не ищет файлы в подпапках?
Ответить с цитированием
  #22  
Старый 23.11.2012, 05:40
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от MoS
возник вопрос, почему в этом коде при указании маски допустим *.txt не ищет файлы в подпапках?
Потому что маска "*.txt" исключает "из обзора" всё что не имеет расширения ".txt". Не только файлы, но и папки.
Другими словами этот код с маской "*.txt" не увидит ни файлов ни папок у которых расширение не ".txt", а раз он не увидит папку, то и не войдёт в неё.
Ответить с цитированием
  #23  
Старый 23.11.2012, 16:31
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Значит все-таки есть костыль для *.*. Прикольно.
to ТС:
Перебирать надо папки (с маской * и проверять атрибут faDirectory), а потом в папке отдельно запускать поиск *.txt.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #24  
Старый 23.11.2012, 16:40
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Bargest
Значит все-таки есть костыль для *.*. Прикольно.
Ну да, у винды тяжкое наследие DOS-а. Даже если в имени файла нет точки и вроде не должно быть расширения, но всё равно считается что расширение есть, просто пустое. Например папка с именем "TEMP" представляется как "TEMP." - т.е. 4 символа имя, 0 символов расширение и точка между ними. Поэтому под виндой маска "*.*" работает всегда.

p.s. Ещё пример тяжкого наследия DOS-а - нельзя создать папку или файл например с таким именем: "con.txt"
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Alegun (27.11.2012)
  #25  
Старый 27.11.2012, 02:42
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп: Офигеть, и вправду нельзя такой файл создать, во приколка:-О!

Небольшой пример по поиску: http://www.delphisources.ru/forum/sh...ad.php?t=10003
Ответить с цитированием
  #26  
Старый 27.11.2012, 08:42
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

можно:

-создать папку temp.
md \\?\d:\Downloads\temp.

-создать файл con.txt
type nul > \\?\d:\Downloads\con.txt
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #27  
Старый 09.12.2012, 03:32
Аватар для MoS
MoS MoS вне форума
Прохожий
 
Регистрация: 21.11.2012
Сообщения: 29
Версия Delphi: 7
Репутация: 10
По умолчанию

Помогите переписать этот код для поиска с маской в подпапках!

Код:
procedure FindFiles(const Path : String);
var
  SR  : TSearchRec;
  Ext : String;
begin
  if FindFirst(ExpandFileName(Path + '\*.*'), faAnyFile, SR) = 0 then
  try
    repeat
      if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
        FindFiles(ExpandFileName(Path + '\' + SR.Name))
      else if (SR.Name[1] <> '.') then
        ListBox1.Items.Add(SR.Name);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
Ответить с цитированием
  #28  
Старый 09.12.2012, 13:15
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Код:
procedure GetAllFiles(Path: string; ListBox: TListBox );
var
  sRec: TSearchRec;
  isFound: Boolean;
begin
  Path := IncludeTrailingPathDelimiter(Path);
  isFound := FindFirst(Path + '\*.*', faAnyFile, sRec) = 0;
  while isFound do
  begin
    if (sRec.Name <> '.') and (sRec.Name <> '..') then
    begin
      if (sRec.Attr and faDirectory) = faDirectory then
        GetAllFiles(Path + sRec.Name, ListBox);
      if Pos('.mp3', Copy(sRec.Name, Length(sRec.Name)-3, 4)) = 1 then
        ListBox.Items.Add(Path + sRec.Name);
      if Pos('.AAC', Copy(sRec.Name, Length(sRec.Name)-3, 4)) = 1 then
        ListBox.Items.Add(Path + sRec.Name);
    end;
    Application.ProcessMessages;
    isFound := FindNext(sRec) = 0;
  end;
  FindClose(sRec);
end;
Ответить с цитированием
  #29  
Старый 09.12.2012, 13:16
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от MoS
Помогите переписать этот код для поиска с маской в подпапках!
Я делаю так:
Код:
procedure FindFiles(const Dir, Ext: string; ResultList: TStrings);

  procedure SubFind(const Path: string);
  var
    SR: TSearchRec;
  begin
    if FindFirst(Path + '*.*', faAnyFile, SR) = NO_ERROR then
    try
      repeat
        if (SR.Attr and faDirectory) = 0 then // File
        begin
          if AnsiSameText(Ext, ExtractFileExt(SR.Name)) then ResultList.Add(Path + SR.Name);
        end else // Dir
        begin
          if (SR.Name <> '.') and (SR.Name <> '..') then SubFind(Path + SR.Name + '\');
        end;
      until FindNext(SR) <> NO_ERROR;
    finally
      FindClose(SR);
    end;
  end;

begin
  SubFind(IncludeTrailingPathDelimiter(Dir));
end;
Подобный код я использую уже много лет и так часто, что могу гарантировать его полную работоспособность.

Пример использования:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.BeginUpdate;
  try
    FindFiles('C:\WINDOWS', '.exe', ListBox1.Items);
  finally
    ListBox1.Items.EndUpdate;
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
MoS (09.12.2012)
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter