我有一个有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将会显示。
答案 0 :(得分:2)
您可以GetAttributes
和SetAttributes
使用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上重定向问题的评论。)