Delphi字符串搜索文件

时间:2011-12-26 19:06:32

标签: delphi delphi-xe2

我有一个有3种形式的应用程序(TForm1,TForm2,TForm3)。我需要以下代码: 在TForm1.BitBtn上点击" 10.220.70.32 BSNLESDP25A"和" 10.220.70.33 BSNLESDP25B"将从"主持人"文件位于"%windir%\ System32 \ drivers \ etc"目录。如果发现"主持人"文件属性将更改为" Readonly"和"系统"和Form2将会显示。如果没有找到那么" Readonly"和"系统" " host"的属性文件将被删除,两行将附加到" host"文件为" 10.220.70.32 BSNLESDP25A"和" 10.220.70.33 BSNLESDP25B"和Form3将会显示。

1 个答案:

答案 0 :(得分:2)

您可以GetAttributesSetAttributes使用IOUtils.TFile;这是来自XE2文档的example,显示了使用两者。

由于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上添加清单。

(另请参阅David对您在64位Windows上重定向问题的评论。)