Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2016, 16:46   #1
elf01
Пользователь
 
Регистрация: 18.11.2011
Сообщений: 34
По умолчанию Поиск файла

И так у меня есть такой поиск, ищет по частям с начало папки а потом уже нужный файл. Так же тут определяется разрядность компьютера, так как на разных разрядностях по разному подписаны папки. Вопрос такой, что я не пойму где допустил скажем так ошибку. там есть поиск папки v140 или же v145, и по ним дальше работать, но если в друг найдет папку v150 или какую нибудь v5678, то ясное дальше поиск нужного exe не найдет. Подскажите где нужно написать условия ограничения или что-то подобное чтобы не находило не нужные папки, а скажем только v140 и v145.

Код:
procedure TForm1.ScanDir(Dir: string);
var
  hFind: THandle;
  FD: TWIN32FindData;
begin
  hFind:= FindFirstFile(PChar(Dir + '\*.*'), FD);
  if (hFind <> INVALID_HANDLE_VALUE) then try
    repeat
    if (FD.cFileName<>String('.')) and (FD.cFileName <> '..') then begin
      if (FD.dwFileAttributes and faDirectory) <> 0 then
       Form1.Memo2.Lines.Add(Dir + FD.cFileName);
       end;
    until not FindNextFile(hFind,FD);
  finally
    Windows.FindClose(hFind);
  end;
end;

procedure TForm1.FindFiles(StartFolder, Mask: string; List: TStrings; ScanSubFolders: Boolean = True);
var
  SearchRec: TSearchRec;
  FindResult: Integer;
begin
  List.BeginUpdate;
  try
    StartFolder := IncludeTrailingPathDelimiter(StartFolder);
    FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          if (Attr and faDirectory) <> 0 then
          begin
            if ScanSubFolders and (Name <> '.') and (Name <> '..') then
              FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
              List.Add(StartFolder + Name);
          end;
          FindResult := FindNext(SearchRec);
        end;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
end;

function IsWin64: Boolean;
type
  TIsWow64Process = function(Handle: THandle; var Res: BOOL): BOOL; stdcall;
var
  IsWow64Result: BOOL;              // Result from IsWow64Process
  IsWow64Process: TIsWow64Process;  // IsWow64Process fn reference
begin
  Result := False;

  IsWow64Process := GetProcAddress(GetModuleHandle(Kernel32), 'IsWow64Process'); // Do Not Localize
  if (Assigned(IsWow64Process) and IsWow64Process(GetCurrentProcess, IsWow64Result)) then
    Result := IsWow64Result;
end;

procedure TForm1.v140T(Sender: TObject);
begin
  poisk := Memo2.lines[col-1] +'\ANSYS\bin\winx64\';
  FindFiles(poisk, 'ansys140.exe', memo2.Lines, true);
end;

procedure TForm1.v140F(Sender: TObject);
begin
  poisk := Memo2.lines[col-1] +'\ANSYS\bin\Intel\';
  FindFiles(poisk, 'ansys140.exe', memo2.Lines, true);
end;

procedure TForm1.v145T(Sender: TObject);
begin
  poisk := Memo2.lines[col-1] +'\ANSYS\bin\winx64\';
  FindFiles(poisk, 'ansys145.exe', memo2.Lines, true);
end;

procedure TForm1.v145F(Sender: TObject);
begin
  poisk := Memo2.lines[col-1] +'\ANSYS\bin\Intel\';
  FindFiles(poisk, 'ansys145.exe', memo2.Lines, true);
end;


procedure TForm1.PoiskA(Sender: TObject);
var 
 Find:string; 
 inst:integer; 
 Find2:string;

 finis:string;
 ilis:integer;
begin
Memo2.Clear;
Memo3.Lines.Add('...Поиск ANSYS'+' ['+DateToStr( Date ) + ' ' + TimeToStr( Time )+']');
ScanDir('C:\Program Files\ANSYS Inc\');
ScanDir('D:\Program Files\ANSYS Inc\');
ScanDir('E:\Program Files\ANSYS Inc\');
ScanDir('C:\Program Files(x86)\ANSYS Inc\');
ScanDir('D:\Program Files(x86)\ANSYS Inc\');
ScanDir('E:\Program Files(x86)\ANSYS Inc\');

if memo2.Lines.Count = 0 then
    begin
       ShowMessage('Скачайте и установите программу ANSYS');
    end;

find:='v140'; 
find2:='v145';

For inst:=0 to Memo2.Lines.Count-1 do 

If Pos(find2, Memo2.Lines.Text)=0
Then
Begin
If Pos(find, Memo2.Lines.Text)<>0
Then
Begin

col := Memo2.Lines.Count;
Case IsWin64 of

 True: v140T(Sender);
 False: v140F(Sender);

  end;

End;
End
else
Begin

col := Memo2.Lines.Count;
Case IsWin64 of

 True: v145T(Sender);
 False: v145F(Sender);

  end;

End;

begin
for ilis :=0 to Memo2.Lines.Count-1 do
if Pos('exe', Memo2.Lines.Strings[col-1])<>0 then
begin
finis := Memo2.lines[col-1];
end
else
begin
ShowMessage('Проверьте целостность файлов программы ANSYS');
end;
end;

End;
elf01 вне форума Ответить с цитированием
Старый 21.09.2016, 19:19   #2
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Немного не по теме
Цитата:
Сообщение от elf01 Посмотреть сообщение
Код:
ScanDir('C:\Program Files\ANSYS Inc\');
ScanDir('D:\Program Files\ANSYS Inc\');
ScanDir('E:\Program Files\ANSYS Inc\');
ScanDir('C:\Program Files(x86)\ANSYS Inc\');
ScanDir('D:\Program Files(x86)\ANSYS Inc\');
ScanDir('E:\Program Files(x86)\ANSYS Inc\');
Папку Program Files текущей ОС можно задать так
Код:
function GetProgramFilesPath: String;
var
  Buffer: Array[0..MAX_PATH] of Char;
begin
  if ShGetSpecialFolderPath(Application.Handle, Buffer, CSIDL_PROGRAM_FILES{CSIDL_PROGRAM_FILESX86}, False) then Result := Buffer else Result := '';
end;

procedure TForm6.Button1Click(Sender: TObject);
begin
  Edit1.Text := GetProgramFilesPath;
end;
Скинь лучше рабочий пример. Так сложно допилить до рабочего состояния

Последний раз редактировалось Shouldercannon; 22.09.2016 в 17:23.
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск файла parshin Microsoft Office Excel 7 28.02.2013 17:27
Поиск файла rust-02 Мультимедиа в Delphi 3 02.09.2010 06:06
Поиск файла plusstick Microsoft Office Access 4 22.02.2010 11:09
поиск файла Mihailhome Общие вопросы Delphi 1 25.05.2009 18:03
Поиск файла БД D-mon БД в Delphi 12 29.05.2008 13:26