![]()  | 
	
 
  | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Написал программку ,поиск файлов по всем дискам.. 
		
	
		
		
		
		
		
	
		
		
	
	
	Но программа не ищит,так как требует доступ к папке windows.. Как получить доступ к папке windows???  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Это не программа не ищет, а сработала политика безопасности, что абсолютно нормально. Если вы уверены в своей программе, то запустите ее от имени администратора и тогда получите доступ и к этой папке. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
 
Bomj (15.01.2016)
  | ||
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 +1. 
		
	
		
		
		
		
		
	
		
		
	
	
	Можно просто в манифесте указать, что программа требует права администратора, тогда при старте программы система безопасности сделает запрос. А что бы избавиться от этого надо программу подписать, но это уже более сложный процесс и, если ты собираешься передавать программу другим людям, стоит денег. ЗЫ. Можно просто исключить из поиска некоторые папки, на которые система безопасности "не ровно дышит". Типа домашки винды, Program Files и т.д.  | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
Bomj (15.01.2016)
  | ||
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код вроде правильный,но даже если запускаю от имени администратора,всё равно не каких результатов нет. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Вообще, думаю, что проблема в чем-то другом. На чтение то система безопасности дает доступ. 
		
	
		
		
		
		
		
	
		
		
	
	
	Код покажи.  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Код: 
	procedure FindI(const aDir : String);
//const
//N = 10;
//ArrExt : array[1..N] of String = ('3FR', 'ACCDB', 'TXT', 'AI', 'ARW', 'BAY');
var
  StrExt : string;
  StrDir : String;
  SearchRec : TSearchRec;
  i : Integer;
begin
  StrDir := IncludeTrailingBackslash(aDir);
  if FindFirst(StrDir + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      StrExt := UpperCase( ExtractFileExt(SearchRec.Name) );
      if (SearchRec.Name = '.') or (SearchRec.Name = '..') then
        Continue;
      if (SearchRec.Attr and faDirectory) <> 0 then
        FindI(StrDir + SearchRec.Name)
      else
        for i := 1 to N do begin
          if StrExt = ArrExt[i] then begin
          
        end;
    until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;
procedure TForm1.Button1Click(Sender: TObject);
 var ser:TSearchRec;
 StrDir:string;
begin
 FindI('D :\');
 Memo1.Lines.Add(StrDir+ser.Name);
end;
end.Последний раз редактировалось Bomj, 15.01.2016 в 22:14.  | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ага!!! 
		
	
		
		
		
		
		
	
		
		
	
	
	Если я правильно помню, то ExtractFileExt дает расширение с лидирующей точкой (т.е. ExtractFileExt('aaa.txt') даст '.txt'). А вообще, есть модуль Masks и в нем функция MatchesMask, Лучше ею пользоватьсяю  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Думаете  что из ExtractFileExt не работает? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Код: 
	//ArrExt : array[1..N] of String = ('3FR', 'ACCDB', 'TXT', 'AI', 'ARW', 'BAY');Код: 
	//ArrExt : array[1..N] of String = ('.3FR', '.ACCDB', '.TXT', '.AI', '.ARW', '.BAY'); | 
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
 
Bomj (16.01.2016)
  | ||
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ругается на это:  
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	ArrExt : array[1..N] of String = ('.3FR', '.ACCDB', '.TXT', '.AI', '.ARW', '.BAY');Ошибка:cannot initialize local variables Как я понимаю,что тип данных не совместим???  | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 У вас 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Код: 
	const
N = 10;
ArrExt : array[1..N] of String = ('3FR', 'ACCDB', 'TXT', 'AI', 'ARW', 'BAY');Код: 
	ArrExt : array[1..N] of String = ('','','','','3FR', 'ACCDB', 'TXT', 'AI', 'ARW', 'BAY'); | 
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
 
Bomj (16.01.2016)
  | ||
| 
		 
			 
			#12  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Я не знаю что уже и делать,не работает..программа запускается но при нажатие на кнопку должно выводится в memo список найденых файлов. 
		
	
		
		
		
		
		
	
		
		
	
	
	Но не выводит.. Код: 
	procedure TForm1.Button1Click(Sender: TObject); var ser:TSearchRec; StrDir:string; begin Memo1.Lines.Add(StrDir+ser.Name); end; end. Не работает.  | 
| 
		 
			 
			#13  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Код: 
	const
ArrExt : array[0..5] of String = ('.3FR', '.ACCDB', '.TXT', '.AI', '.ARW', '.BAY');
procedure FindI(const aDir : String);
var
  StrExt, StrDir : String;
  SearchRec : TSearchRec;
  i : Integer;
begin
  StrDir := IncludeTrailingBackslash(aDir);
  if FindFirst(StrDir + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      StrExt := UpperCase( ExtractFileExt(SearchRec.Name) );
      if (SearchRec.Name = '.') or (SearchRec.Name = '..') then
        Continue;
      if (SearchRec.Attr and faDirectory) <> 0 then
        FindI(StrDir + SearchRec.Name)
      else
        for i := Low(ArrExt) to High(ArrExt) do
         if StrExt = ArrExt[i] then
          begin
           Form1.Memo1.Lines.Add(StrDir + SearchRec.Name);
          end;
    until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Clear;
 FindI('C:\Windows');
end; | 
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
 
Bomj (16.01.2016)
  | ||
| 
		 
			 
			#14  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 При нажатие на кнопку,выскакивает окно с ошибкой. 
		
	
		
		
		
		
		
		
			[IMG]  [/IMG]И ещё такой вопрос: Программа запускается,зажимаю на кнопку поиск,программа начинает искать,в memo отображаются найденые файлы. Но проходит буквально 10секунд и программа виснет и не отвечает.. Последний раз редактировалось Bomj, 17.01.2016 в 20:48.  | 
| 
		 
			 
			#15  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 По поводу ошибки - непонятно, но программа пытается открыть какой-то странный файл. А не в дебаггере ошибка есть? 
		
	
		
		
		
		
		
	
		
		
	
	
	По поводу зависания. Она не виснет (нечему там виснуть). Видимо, просто заходит в какой-то каталог с большим кол-вом файлов и "шуршит" там, просто подходящий файлов там нет, вот и ничего не выводит. Кстати, что бы прогрмма реагировала хоть как-то во время подобных длинных операций лучше всего вынести этот код в отдельный поток. Ну или, на худой конец, вставить внутри цикла вызов Application.ProcessMessages.  |