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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2013, 00:25   #1
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию Поиск файла на всех дисках

Составил код по поиску файла Install2.txt на все дисках на компьютере. Но поиск происходит только на одном диске, почему то не переходит на следующий. На форме только Button1 и Label1. Помогите, пожалуйста.


Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, iniFiles;

type
  TForm2 = class(TForm)
    Button2: TButton;
    Label1: TLabel;
    procedure Button2Click(Sender: TObject);
  private
    function SearchAndRename(root, AName: String): Boolean;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  k1: integer;
  root: string;

implementation

uses Unit1, Unit3;

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);

var
  ch: Char;
  root: string;
begin

  Button2.tag := Button2.tag + 1;

  case Button2.tag of

    1:
      Button2.Caption := 'Остановить поиск';
    2:
      Button2.Caption := 'Начать поиск';

  end;

  if Button2.tag = 1 then
  begin
    k1 := 0;
  end;
  if Button2.tag = 2 then
  begin
    k1 := 1;
  end;
  if Button2.tag > 1 { max в case -1 } then
    Button2.tag := 0;
  root := 'C:';
    for ch := 'С' to 'Z' do
  begin
    root[1] := ch;
    case GetDriveType(PChar(root)) of
      DRIVE_FIXED, DRIVE_REMOTE:
        if not(SearchAndRename(root, 'Install2.txt')) then
          break;
    end;
  end;

end;

function TForm2.SearchAndRename(root, AName: String): Boolean;
var
  SearchRec: TSearchRec;
  FPath: String;
  iniFile: TIniFile;

begin

  Result := false;
  FPath := root;
  k1 := 0;
    if FPath[Length(FPath)] <> '\' then
    FPath := FPath + '\';
  try
    if FindFirst(FPath + '*', faAnyFile, SearchRec) = 0 then
    begin
      repeat
        Application.ProcessMessages;
        if k1 = 1 then
          break;
        Application.ProcessMessages;
        if (SearchRec.Attr and faDirectory) <> faDirectory then
        begin

          Label1.Caption := FPath + SearchRec.Name;
          if SearchRec.Name = AName then

          begin
            iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) +
              'file.ini');
            try
              iniFile.WriteString('dir_secure_dir', 'N2',
                FPath + SearchRec.Name);
              k1 := 1;
              ShowMessage('Файл найден');
              Form1.Refresh;
              Form2.Destroy;
            finally
              iniFile.Free;
            end;

          end;
        end
        else
        begin
          if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
      begin
            SearchAndRename(FPath + SearchRec.Name + '\', AName);
          end;
        end;

      until (SearchRec.Name = AName) or (FindNext(SearchRec) <> 0);
      FindClose(SearchRec);
    end;
    Result := true;
  except
    on E: Exception do
    begin
      Application.MessageBox(PChar(E.Message), '........', MB_ICONERROR);
    end;
  end;
end;

end.

Последний раз редактировалось Stilet; 06.02.2013 в 00:32.
gigar вне форума Ответить с цитированием
Старый 06.02.2013, 00:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А может отладчиком стоит пройтись?
И еще такой момент:
Цитата:
for ch := 'С' to 'Z' do
begin
root[1] := ch;
case GetDriveType(PChar(root)) of
Открой для себя GetLogicalDriveStrings. Зачем все буквы перебирать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.02.2013, 01:47   #3
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

А можно чтобы было применимо к этому коду?
gigar вне форума Ответить с цитированием
Старый 06.02.2013, 18:47   #4
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

Уважаемы специалисты, помогите. В интернете есть примеры только для поиска на одном диске.
gigar вне форума Ответить с цитированием
Старый 06.02.2013, 18:54   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вы уже получили ответы. Перебираете диски типа DT_FIXED и затем рекурсивно ищите в каталогах файлы. Примеры последнего просто кишат интернетом.
Человек_Борща вне форума Ответить с цитированием
Старый 06.02.2013, 20:30   #6
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

Я то это понял, но как применить это к данному коду? Поэтому и обращаюсь к Вам с это просьбой о помощи
gigar вне форума Ответить с цитированием
Старый 07.02.2013, 18:55   #7
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

Уважаемые гуру программирования, нужна Ваша помощь. Я уже даже не знаю что делать
gigar вне форума Ответить с цитированием
Старый 07.02.2013, 19:38   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Я уже даже не знаю что делать
Гуглом пользоваться. Ваша тема себя исчерпала ответы даны.Но вы просите разжевать и в рот положить. Этим сами занимайтесь =)
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск всех положительных ASM mishanqa Помощь студентам 0 14.09.2011 18:26
Поиск всех окон конкретного приложения Artro Win Api 4 26.05.2011 18:16
Поиск всех Edit Mr_skiner Общие вопросы Delphi 5 12.05.2011 20:30
Поиск ВСЕХ минимальных остовных деревьев Flicker Помощь студентам 0 17.10.2010 01:26
рекурсивный поиск файлов всех картинок doniyor Общие вопросы Delphi 3 08.09.2009 09:21