Поиск строки Delphi из файла - PullRequest
1 голос
/ 26 декабря 2011

У меня есть приложение, имеющее 3 формы (TForm1, TForm2, TForm3). Мне нужен код для следующего: В TForm1.BitBtn Нажмите «10.220.70.32 BSNLESDP25A» и «10.220.70.33 BSNLESDP25B», чтобы выполнить поиск из файла «host», расположенного в каталоге «% windir% \ System32 \ drivers \ etc». В случае обнаружения атрибуты файла «host» будут изменены на «Readonly», и будут показаны «System» и Form2. Если он не найден, атрибуты «Readonly» и «System» файла «host» будут удалены, а две строки будут добавлены в файл «host» как «10.220.70.32 BSNLESDP25A» и «10.220.70.33 BSNLESDP25B» и Form3. .

1 Ответ

2 голосов
/ 27 декабря 2011

Вы можете использовать IOUtils.TFile для GetAttributes и SetAttributes;Вот пример из документации XE2, в котором показано использование обоих.

Поскольку файл hosts обычно довольно мал, я бы, вероятно, использовал TStringList для его открытия и поиска, так какэто самый быстрый и простой способ.

uses
  System.IOUtils;

// Clear the readonly and system attributes
var
  Attributes: TFileAttributes;
  SL: TStringList;
  Idx: Integer;
begin
  Attributes := [];  // Clear any existing attributes
  TFile.SetAttributes(PathAndFileName, Attributes);
  SL := TStringList.Create;      
  try
    SL.LoadFromFile(PathAndFileName);
    if SL.IndexOf(YourFirstSearchString) = -1 then // Not found
      SL.Add(YourFirstSearchString);
    if SL.IndexOf(YourSecondSearchString) = -1 then
      SL.Add(YourSecondSearchString);
    SL.SaveToFile(PathAndFileName);
  finally
    SL.Free;
  end;
  Include(Attributes, TFileAttribute.faSystem);
  Include(Attributes, TFileAttribute.faReadOnly);
  TFile.SetAttributes(PathAndFileName, Attributes);
end;

Обратите внимание, что у вас могут возникнуть проблемы, если вы не запускаете его под учетной записью администратора, поскольку в папке Windows\ ничего не может быть записано иначе.Вы должны включить в свое приложение манифест, который сообщает Windows, что приложение требует прав администратора, поэтому UAC запросит у пользователя учетную запись администратора и пароль.Здесь приведены примеры добавления манифеста в SO.

(см. Также комментарий Дэвида к вашему вопросу о перенаправлении в 64-битной Windows.)

...