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

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

Поиск файла в NTFS [D7, WinXP]


Lampochka ©   (2008-02-14 03:51:00) 

Доброго здравия господа!!!

Прошу Вас помочь мне решить задачу с поиском любого файла в NTFS.
Я написал программку, которая выводит список всех файлов в таблицу. В FAT32 работает замечательно, в NTFS - отказывается.

var
 FileName: String;
 cDir: String;
 n: Longint;
 Fil: OleVariant;

procedure TGlav_Form.Prorisovka;
begin
 Glav_Form.ElLabel1.Top := 5;
 Glav_Form.ElLabel1.Visible := true;
 Glav_Form.ElLabel2.Top := 5;
 Glav_Form.ElLabel2.Visible := true;
 Glav_Form.ElPopupButton1.Visible := true;
 Glav_Form.ElPopupButton2.Visible := true;
end;

procedure Find;
var
 SearchRec: TSearchRec;
 Date: TDateTime;
begin
 GetDir (0, cDir);
 if cDir [length(cDir)] <> '\' then cDir := cDir + '\';
 FileName := '*.*';
 if FindFirst (FileName, faAnyFile, SearchRec) = 0 then
   repeat
     Application.ProcessMessages;
     try
       Glav_Form.ElBiProgressBar1.DarkValue := n;
       if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
         begin
           Glav_Form.Update;
           Glav_Form.ElTreeStringGrid1.RowCount := n;
           cDir := GetCurrentDir;
           if cDir [length(cDir)] <> '\' then cDir := cDir + '\';
           Glav_Form.ElTreeStringGrid1.Cells [0, n] := IntToStr (n);
           Date := FileDateToDateTime (SearchRec.Time);
           Glav_Form.ElTreeStringGrid1.Cells [1, n] := DateToStr (Date);
           Glav_Form.ElTreeStringGrid1.Cells [2, n] := SearchRec.Name;
           Glav_Form.ElTreeStringGrid1.Cells [4, n] := cDir;
           n := n + 1;
         end;
       except

       end;
     until FindNext (SearchRec) <> 0;

 if FindFirst ('*', faAnyFile, SearchRec) = 0 then
   repeat
     if (SearchRec.Attr and faDirectory) = faDirectory
       then
         if SearchRec.Name [1] <> '.' then
           begin
             chDir (SearchRec.Name);
             Find;
             ChDir ('..');
           end;
   until FindNext (SearchRec) <> 0;
end;

procedure TGlav_Form.FormActivate(Sender: TObject);
begin
 prorisovka;
end;

procedure TGlav_Form.ElPopupButton1Click(Sender: TObject);
begin
 if Glav_Form.ElFolderDialog1.Execute then
   begin
     Glav_Form.ElLabel2.Caption := 'идет работа...';
     Glav_Form.ElBiProgressBar1.Visible := true;
     Glav_Form.Update;
     cDir := Glav_Form.ElFolderDialog1.Folder;
     n := 0;
     ChDir (cDir);
     Find;
     if n = 0 then ShowMessage ('Файлов, удовлетворяющих критерию поиска нет')
       else ShowMessage ('Файлы включены в таблицу');
   end;
   Glav_Form.ElLabel2.Caption := 'ожидание';
   Glav_Form.ElBiProgressBar1.Visible := false;
   Glav_Form.ElTreeStringGrid1.UseDefaultEditor := true;
end;

procedure TGlav_Form.FormCanResize(Sender: TObject; var NewWidth,
 NewHeight: Integer; var Resize: Boolean);
begin
 prorisovka;
end;

procedure TGlav_Form.ElPopupButton2Click(Sender: TObject);
var
 Fil: OleVariant;
begin
 Glav_Form.WordApplication1.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
 Glav_Form.WordDocument1.ConnectTo(Glav_Form.WordApplication1.ActiveDocument);
 for n := 0 to Glav_Form.ElTreeStringGrid1.RowCount do
   begin
     Glav_Form.WordApplication1.Selection.TypeText (Glav_Form.ElTreeStringGrid1.Rows [n].Text);
   end;
 Glav_Form.WordApplication1.Visible := true;
end;

procedure TGlav_Form.FormCloseQuery(Sender: TObject;
 var CanClose: Boolean);
begin
 try
   Glav_Form.WordApplication1.Quit;
 except

 end;
end;

procedure TGlav_Form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Application.Terminate;
end;

end.


Саша   (2008-02-15 23:40:00) [1]

Злые вы.

Lampochka, глянь суда, должно помочь
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=49572


Германн   (2008-02-15 02:53:00) [2]


> ли в похожей ситуации снова на форум за решением ?
>

Угу. Снова.
"И вечный бой. Покой нам только снится!"
:)
А вот на королевстве нет конференции для "начинающих". Что бы это значило?


Riply   (2008-02-15 02:42:00) [3]

> [9] Lampochka ©   (14.02.08 23:16)
> ОГРОМНОЕ спасибо, все получилось!!!

"все получилось" - это как понимать надо ?
В смысле чужой код работает ? Так в этом никто и не сомневался.

А может "все получилось" должно означать, что разобрался и понял,
в чем была ошибка, чтобы в похожей ситуации ее не повторять,
что пришло озарение, почему "отсутствие FindClose это плохо" ?

Или в похожей ситуации снова на форум за решением ?


Lampochka   (2008-02-14 23:16:00) [4]

Удалено модератором


Плохиш   (2008-02-14 22:53:00) [5]


> Lampochka ©   (14.02.08 22:31) [6]


> Мне казалось, что форум для того и существует, чтобы профи
> помогали новичкам, а не издевались!!!

Новичкам здесь помогают, а бездельником и дармоедам - нет. А ты относишься ко вторым, во-первых, т.к. не потрудился запустить отладчик, во-вторых, не описал проблему и в-третих, вывалил сюда кучу букаф, типа разбирайтесь.


ketmar   (2008-02-14 22:35:00) [6]

>[6] Lampochka © (2008-02-14 22:31:00)
>Мне казалось, что форум для того и существует, чтобы профи помогали
>новичкам, а не издевались!!!

помогали учиться, а не «писали код». за «писали код» уже оплата идёт.

---
Understanding is not required. Only obedience.


Lampochka   (2008-02-14 22:31:00) [7]

Сергею М.

Нет она не так говорит, как можно видеть в моем коде - 'Файлов, удовлетворяющих критерию поиска нет'

Плохишу.

Мне казалось, что форум для того и существует, чтобы профи помогали новичкам, а не издевались!!!

Все равно спасибо, господа профи!!!


Anatoly Podgoretsky   (2008-02-14 14:03:00) [8]

> Игорь Шевченко  (14.02.2008 12:51:04)  [4]

Так тоже правильно, только не у партизан.


Игорь Шевченко   (2008-02-14 12:51:00) [9]

Хинт: У файлов в NTFS имеются дополнительные атрибуты.

Смотри код сравнения атрибутов. Желательно в отладчике.

if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then

(наверное) менять на  if (SearchRec.Attr and faAnyFile) = faAnyFile then


Плохиш   (2008-02-14 10:35:00) [10]


> Lampochka ©   (14.02.08 03:51)  

Я не понял, это мы должны отладить твой код?


Slym   (2008-02-14 09:48:00) [11]

1. Ниодного FindClose я не нашел, а это плохо :)
2. Смена текущего каталога зачем? Без него никак?
procedure Find(Path:string);
var
 SearchRec: TSearchRec;
 n:integer;
begin
 Path:=IncludeTrailingPathDelimiter(Path);

 if FindFirst (Path+'*', faAnyFile, SearchRec) = 0 then
 repeat
   if (SearchRec.Attr and faDirectory) = 0 then
   begin
     Glav_Form.Update;
     Glav_Form.ElTreeStringGrid1.RowCount:=Glav_Form.ElTreeStringGrid1.RowCount+1;
     n:=Glav_Form.ElTreeStringGrid1.RowCount;
     Glav_Form.ElBiProgressBar1.DarkValue:=n;
     Glav_Form.ElTreeStringGrid1.Cells [0, n] := IntToStr (n);
     Glav_Form.ElTreeStringGrid1.Cells [1, n] := DateToStr (FileDateToDateTime (SearchRec.Time));
     Glav_Form.ElTreeStringGrid1.Cells [2, n] := SearchRec.Name;
     Glav_Form.ElTreeStringGrid1.Cells [4, n] := Path;
   end;
 until FindNext (SearchRec) <> 0;
 FindClose(SearchRec);

 if FindFirst(Path+'*', faDirectory, SearchRec) = 0 then
 repeat
   if SearchRec.Name[1]<>'.' then
     Find(Path+SearchRec.Name);
 until FindNext (SearchRec) <> 0;
 FindClose(SearchRec);
end;

Find(Glav_Form.ElFolderDialog1.Folder);


Сергей М.   (2008-02-14 09:09:00) [12]


> в NTFS - отказывается


Что, прямо вот так и говорит - "работать отказываюсь" ?)


Наверх

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