Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.01.2016, 18:45
Bomj Bomj вне форума
Прохожий
 
Регистрация: 02.08.2013
Сообщения: 47
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию Папка windows

Написал программку ,поиск файлов по всем дискам..
Но программа не ищит,так как требует доступ к папке windows..
Как получить доступ к папке windows???
Ответить с цитированием
  #2  
Старый 15.01.2016, 19:32
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Это не программа не ищет, а сработала политика безопасности, что абсолютно нормально. Если вы уверены в своей программе, то запустите ее от имени администратора и тогда получите доступ и к этой папке.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Bomj (15.01.2016)
  #3  
Старый 15.01.2016, 19:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

+1.
Можно просто в манифесте указать, что программа требует права администратора, тогда при старте программы система безопасности сделает запрос. А что бы избавиться от этого надо программу подписать, но это уже более сложный процесс и, если ты собираешься передавать программу другим людям, стоит денег.

ЗЫ. Можно просто исключить из поиска некоторые папки, на которые система безопасности "не ровно дышит". Типа домашки винды, Program Files и т.д.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Bomj (15.01.2016)
  #4  
Старый 15.01.2016, 21:27
Bomj Bomj вне форума
Прохожий
 
Регистрация: 02.08.2013
Сообщения: 47
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

Код вроде правильный,но даже если запускаю от имени администратора,всё равно не каких результатов нет.
Ответить с цитированием
  #5  
Старый 15.01.2016, 22:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вообще, думаю, что проблема в чем-то другом. На чтение то система безопасности дает доступ.
Код покажи.
Ответить с цитированием
  #6  
Старый 15.01.2016, 22:11
Bomj Bomj вне форума
Прохожий
 
Регистрация: 02.08.2013
Сообщения: 47
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

Цитата:
Сообщение от lmikle
Вообще, думаю, что проблема в чем-то другом. На чтение то система безопасности дает доступ.
Код покажи.
да,на чтение система даёт права.

Код:
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  
Старый 15.01.2016, 22:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ага!!!
Если я правильно помню, то ExtractFileExt дает расширение с лидирующей точкой (т.е. ExtractFileExt('aaa.txt') даст '.txt'). А вообще, есть модуль Masks и в нем функция MatchesMask, Лучше ею пользоватьсяю
Ответить с цитированием
  #8  
Старый 15.01.2016, 23:29
Bomj Bomj вне форума
Прохожий
 
Регистрация: 02.08.2013
Сообщения: 47
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

Думаете что из ExtractFileExt не работает?
Ответить с цитированием
  #9  
Старый 16.01.2016, 09:39
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
//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  
Старый 16.01.2016, 10:17
Bomj Bomj вне форума
Прохожий
 
Регистрация: 02.08.2013
Сообщения: 47
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

Ругается на это:
Код:
ArrExt : array[1..N] of String = ('.3FR', '.ACCDB', '.TXT', '.AI', '.ARW', '.BAY');

Ошибка:cannot initialize local variables

Как я понимаю,что тип данных не совместим???
Ответить с цитированием
  #11  
Старый 16.01.2016, 11:16
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

У вас
Код:
const
N = 10;
ArrExt : array[1..N] of String = ('3FR', 'ACCDB', 'TXT', 'AI', 'ARW', 'BAY');
размерность массива задана как 10 (N), а тепепрь посчитайте сколько строк всего задано принудительно, здесь должно быть так
Код:
ArrExt : array[1..N] of String = ('','','','','3FR', 'ACCDB', 'TXT', 'AI', 'ARW', 'BAY');
и явные константы нужно вынести в общий доступ
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Bomj (16.01.2016)
  #12  
Старый 16.01.2016, 11:32
Bomj Bomj вне форума
Прохожий
 
Регистрация: 02.08.2013
Сообщения: 47
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

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

Код:
procedure TForm1.Button1Click(Sender: TObject);
 var ser:TSearchRec;
 StrDir:string;
begin
 Memo1.Lines.Add(StrDir+ser.Name);
end;

end.

Не работает.
Ответить с цитированием
  #13  
Старый 16.01.2016, 12:08
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Bomj
...Но не выводит...
Проверил, выводит
Код:
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  
Старый 17.01.2016, 19:57
Bomj Bomj вне форума
Прохожий
 
Регистрация: 02.08.2013
Сообщения: 47
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

При нажатие на кнопку,выскакивает окно с ошибкой.
[IMG][/IMG]

И ещё такой вопрос: Программа запускается,зажимаю на кнопку поиск,программа начинает искать,в memo отображаются найденые файлы.
Но проходит буквально 10секунд и программа виснет и не отвечает..

Последний раз редактировалось Bomj, 17.01.2016 в 20:48.
Ответить с цитированием
  #15  
Старый 18.01.2016, 01:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

По поводу ошибки - непонятно, но программа пытается открыть какой-то странный файл. А не в дебаггере ошибка есть?
По поводу зависания. Она не виснет (нечему там виснуть). Видимо, просто заходит в какой-то каталог с большим кол-вом файлов и "шуршит" там, просто подходящий файлов там нет, вот и ничего не выводит. Кстати, что бы прогрмма реагировала хоть как-то во время подобных длинных операций лучше всего вынести этот код в отдельный поток. Ну или, на худой конец, вставить внутри цикла вызов Application.ProcessMessages.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:13.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025