Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.16;
Скачать: CL | DM;

Вниз

Поиск файла в NTFS   Найти похожие ветки 

 
Lampochka ©   (2008-02-14 03:51) [0]

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

Прошу Вас помочь мне решить задачу с поиском любого файла в 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-14 09:09) [1]


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


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


 
Slym ©   (2008-02-14 09:48) [2]

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 10:35) [3]


> Lampochka ©   (14.02.08 03:51)  

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


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

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

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

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

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


 
Anatoly Podgoretsky ©   (2008-02-14 14:03) [5]

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

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


 
Lampochka ©   (2008-02-14 22:31) [6]

Сергею М.

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

Плохишу.

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

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


 
ketmar ©   (2008-02-14 22:35) [7]

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

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

---
Understanding is not required. Only obedience.


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


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


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

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


 
Lampochka ©   (2008-02-14 23:16) [9]

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


 
Riply ©   (2008-02-15 02:42) [10]

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

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

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

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


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


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

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


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

Злые вы.

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



Страницы: 1 вся ветка

Текущий архив: 2008.03.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
4-1184690788
San17
2007-07-17 20:46
2008.03.16
Как поставить пароль на раздел в реестре ?


8-1177005334
Лено
2007-04-19 21:55
2008.03.16
Геометрия в делфи. !срочно!


2-1203325043
Thrasher
2008-02-18 11:57
2008.03.16
Открыть файл.


15-1202372827
kyn66
2008-02-07 11:27
2008.03.16
Barcode VCL Component


15-1202490749
Пробегал...
2008-02-08 20:12
2008.03.16
Компилятор выбрасывает условие