![]() |
|
#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'); — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо 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] ![]() И ещё такой вопрос: Программа запускается,зажимаю на кнопку поиск,программа начинает искать,в memo отображаются найденые файлы. Но проходит буквально 10секунд и программа виснет и не отвечает.. Последний раз редактировалось Bomj, 17.01.2016 в 20:48. |
#15
|
|||
|
|||
![]() По поводу ошибки - непонятно, но программа пытается открыть какой-то странный файл. А не в дебаггере ошибка есть?
По поводу зависания. Она не виснет (нечему там виснуть). Видимо, просто заходит в какой-то каталог с большим кол-вом файлов и "шуршит" там, просто подходящий файлов там нет, вот и ничего не выводит. Кстати, что бы прогрмма реагировала хоть как-то во время подобных длинных операций лучше всего вынести этот код в отдельный поток. Ну или, на худой конец, вставить внутри цикла вызов Application.ProcessMessages. |