2011-12-26 5 views
1

私は3つのフォーム(TForm1、TForm2、TForm3)を持つアプリケーションを持っています。次のコードが必要です: On TForm1.BitBtn "%windir%\ System32 \ drivers \ etc"ディレクトリにある "host"ファイルから "10.220.70.32 BSNLESDP25A"と "10.220.70.33 BSNLESDP25B"を検索します。見つかった場合、「ホスト」ファイル属性は「読み取り専用」および「システム」に変更され、Form2が表示されます。見つからなければ、 "ホスト"ファイルの "Readonly"と "System"属性が削除され、 "host"ファイルに "10.220.70.32 BSNLESDP25A"と "10.220.70.33 BSNLESDP25B"という2行が追加され、Form3が表示されます。Delphi String Searchファイルから

+4

あなたがこれまでに試したものを示すコードを投稿し、そしてそれはあなたが期待される方法は動作しませんどのように説明してください。これは、人々があなたのためにすべてのコードを書くサイトではありません。自分で問題を解決するための努力をしていることを示す必要があります。 –

+0

私は学習者です。私は明確なアイデアは持っていない。 –

+0

プロセスを昇格させて実行し、64ビットシステムでファイルリダイレクトを処理する必要があります。属性を変更することは意味がないようです。何を達成しようとしていますか? –

答えて

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はユーザーに管理者アカウントとパスワードを要求します。ここにマニフェストを追加する例があります。

(また、64ビットWindows上のリダイレクトについてのご質問へのデビッドさんのコメントを参照してください。)

+0

"属性:TFileAttributes"は未定義の識別子を与えます。私を助けてください。 –

+0

'TFileAttributes'は' TFile'と同じように 'IOUtils'ユニットからのものです。 –

+0

申し訳ありませんが、XE2について言及したことを思い出しました。新しい命名要件を反映するようにコードを修正しました。 –

関連する問題