Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск файлов возвращает артефакты [D7, XP]


Страницы:   1 2

Sdubaruhnul ©   (2007-07-18 21:51:00) 

Для поиска файлов использую юникодные FindFirstFileW и ко. Ищу: "c:\test\*". Получаю такие результаты поиска:


.
..
folder1
folder2
hello5.txt
hello6.txt


Что бы это могло значить?


dima_bil   (2007-07-26 17:56:00) [1]

Эта процедура находит файлы, показывает имена, расширение, дату и время последнего изменения файла!


dima_bil   (2007-07-26 17:54:00) [2]

Использовать так:

только "*.kl" замени на "*.*". пользуйся так

dir2:='директория для поиска';
Getfiles(Dir2,reg,_type);


dima_bil   (2007-07-26 17:51:00) [3]

procedure GetFiles( APath: string );
var
 sr: TSearchRec;
 isFound: boolean;
 ListItem: TListItem;
 temp: string;
begin
  isFound := FindFirst( APath + '*.kl', faAnyFile, sr ) = 0;
  while isFound do
  begin
     if ( sr.Name <> '.' ) and ( sr.Name <> '..' ) and
        ( ( sr.Attr and faDirectory ) <> faDirectory ) then
        begin
           ListItem := Form1.ListView1.Items.Add;
           temp := ExtractFileName( sr.Name );
           if LastDelimiter( '.', temp ) <> 0 then
              ListItem.Caption := Copy( temp, 0, LastDelimiter( '.', temp )-1 )
           else
              ListItem.Caption := temp;
           temp := ExtractFileExt( sr.Name );
           ListItem.SubItems.Add( 'файл' );
           ListItem.SubItems.Add( DateToStr( FileDateToDateTime(
                                  FileAge( APath + '\' + sr.Name ) ) ) );
           ListItem.SubItems.Add( TimeToStr( FileDateToDateTime(
                                  FileAge( APath + '\' + sr.Name ) ) ) );
        end;
     isFound := FindNext( sr ) = 0;
  end;
  FindClose( sr );
end;


hide   (2007-07-26 11:58:00) [4]

По логике да, но пока не сплюсовал все - скрытые не искались :)


Плохиш   (2007-07-26 11:56:00) [5]


> hide   (26.07.07 11:38) [17]
> Плохиш ©
> Так ищутся и без расширений.

Хм, действительно, когда-то столкнулся с этим, ладно [16] снимается.

> Только faAnyFile = скрытые не найдёт

Какое различие между передачей в качестве параметра $3f или $01+$02+$04+$08+$10+$20 ?


{RASkov}   (2007-07-26 11:53:00) [6]

> > findfirst('C:\*.*', faAnyFile, SR)
>
> Т.е. файлы без расширений не нужны?


> Так ищутся и без расширений.

Вообще-то наверное правильнее, если все подряд искать, то нужно просто * указывать..... ибо маска есть маска.... + "правильный" второй параметр...


hide   (2007-07-26 11:38:00) [7]

Плохиш ©
Так ищутся и без расширений. Только faAnyFile = скрытые не найдёт, что бы все искало нужно все эти fa~ сплюсовать.
Виндовый поиск ищет ещё и внутри архивов, я не сразу понял почему у него на тыщу файлов больше находится :)


Плохиш   (2007-07-26 11:07:00) [8]


> findfirst('C:\ *.*', faAnyFile, SR)

Т.е. файлы без расширений не нужны?


{RASkov}   (2007-07-25 22:09:00) [9]

> [12] hide   (25.07.07 21:19)
> "c:\.", "c:\..",

....а текущий и родительский каталоги в данной функции могут присутствовать вначале пути, но никак не в конце...
т.е. findfirst('.\*.*', faAnyFile, SR)или findfirst('..\*.*', faAnyFile, SR)

> Так, что ты тут зря со своими С:\ наезжаешь.....

Близко не принимай.... смайл забыл поставить.


Virgo_Style   (2007-07-25 22:08:00) [10]

hide   (25.07.07 21:19) [12]
не верно и не спасибо.


Вай, спасибо отобрали... Извиняй, телепатор сломался, а без него понять твой вопрос затруднительно.


{RASkov}   (2007-07-25 22:01:00) [11]

> [12] hide   (25.07.07 21:19)
> не находит "c:\",

Угу.... а так:
findfirst('C:\*.*', faAnyFile, SR)
?
Маску нужно указывать.... т.е. я хочу сказать, что
findfirst('C:\Windows', faAnyFile, SR)
найдет каталог Windows на диске С (если он там есть)
а так
findfirst('C:\Windows\', faAnyFile, SR)
нихрена ничего ненайдет :(.....
Так, что ты тут зря со своими С:\ наезжаешь.....


hide   (2007-07-25 21:19:00) [12]

Virgo_Style ©
не верно и не спасибо.
ищет и во всём диске, только есть особенности - не находит "c:\", "c:\.", "c:\..", а всё остальное содержимое находит.


hide   (2007-07-25 19:53:00) [13]

спасибо


Virgo_Style   (2007-07-25 19:40:00) [14]

hide   (25.07.07 19:34) [9]
Чудес не бывает, ты должен организовать поиск в каждой из папок диска


hide   (2007-07-25 19:34:00) [15]

Cкажите, как искать во всём диске = c:\ используя findfirst/findnext?
В отдельных папках находит, а во всём диске не хочет находить.
даже c:\. и c:\.. пробовал - ничего не найдено, результат findfirst=2


Anatoly Podgoretsky   (2007-07-19 01:07:00) [16]

> Sdubaruhnul  (19.07.2007 00:56:06)  [6]

Надо не собираться, а игнорировать


Германн   (2007-07-19 01:00:00) [17]


> Sdubaruhnul   (19.07.07 00:56) [6]
>
> >ты главное когда будешь делать рекурсивное удаление файлов,
>  не забудь про эти точки%)
>
> Не понял... Я их собирался игнорировать.
>

Значит забудь про обход вложенных папок.


Sdubaruhnul   (2007-07-19 00:56:00) [18]

> ты главное когда будешь делать рекурсивное удаление файлов, не забудь про эти точки%)

Не понял... Я их собирался игнорировать.


antonn   (2007-07-19 00:43:00) [19]

ты главное когда будешь делать рекурсивное удаление файлов, не забудь про эти точки%)


Sdubaruhnul   (2007-07-19 00:24:00) [20]

Короче, ясно что это (текущая и родительская папки).
По мне так это очередной бред, который нужно запомнить.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо