お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"再起動時にファイル/フォルダをリネーム/削除"

この発言は
#01068 Tiny Mouse さんのRE^3:Wininit.iniの使用例
に対するコメントです

 こんにちは、Tiny Mouse です。  再起動時にファイルあるいはフォルダを削除するサンプル、以前に書きましたが、 実は大変なバグがありました。自作のソフトに使っていて、ひどい目に遭いました。 存在しないファイルあるいはフォルダを指定すると、Windows フォルダを削除して しまいます (;_;) 。  現在自分が使っているコードを、以下に紹介します。このコードでは、実在しな いファイルあるいはフォルダを指定しても、最悪なことにはなりません。とはいえ、 適切なエラー処理はしていません。呼び出し前にファイルあるいはフォルダの存在 をチェックすべきです (^^; 。  NT 系では動作未確認です。 {------------------------------------------------------------------------} interface uses Windows, SysUtils, Classes, FileCtrl; function MoveFileAtReboot(FromPath, ToPath: String): Boolean; function DeleteFileAtReboot(Path: String): Boolean; implementation { Windows の次の起動時にファイルをリネームあるいは削除する } { FromPath が '' の時 To を削除する } function MoveFileAtReboot(FromPath, ToPath: String): Boolean; function MoveFileAtRebootFor95(FromPath, ToPath: String): Boolean; var inifile: String; pos: Integer; buf, buf1, buf2: array[0..MAX_PATH] of Char; begin { Wininit.ini のパス名を取得 } GetWindowsDirectory(buf, SizeOf(buf)); inifile := String(buf) + '\Wininit.ini'; { 編集用のStringListを作成 } with TStringList.Create do try try { Wininit.ini が既にあれば読み込む } if FileExists(inifile) then LoadFromFile(inifile); { [Rename]セクションの位置を取得 } pos := IndexOf('[Rename]'); { [Rename]セクションが無ければ追加する } if pos < 0 then pos := Add('[Rename]'); { コピーあるいは削除する設定の行を追加 } if FileGetAttr(FromPath) and faDirectory > 0 then begin { フォルダを削除 } GetShortPathName(PChar(FromPath), buf1, SizeOf(buf1)); Insert(pos + 1, 'DirNul=' + String(buf1)); end else begin { ファイルを削除 } GetShortPathName(PChar(FromPath), buf1, SizeOf(buf1)); Insert(pos + 1, 'Nul=' + String(buf1)); end; if ToPath <> '' then begin { ファイル/フォルダをコピー } GetShortPathName(PChar(FromPath), buf1, SizeOf(buf1)); GetShortPathName(PChar(ToPath), buf2, SizeOf(buf2)); Insert(pos + 1, String(buf2) + '=' + String(buf1)); end; { Wininit.ini を保存する } SaveToFile(inifile); Result := True; except Result := False; end; finally Free; end; end; begin if MoveFileEx(PChar(FromPath), PChar(ToPath), MOVEFILE_DELAY_UNTIL_REBOOT or MOVEFILE_REPLACE_EXISTING) then Result := True else Result := MoveFileAtRebootFor95(FromPath, ToPath); end; { Windows の次の起動時にファイルを削除する } function DeleteFileAtReboot(Path: String): Boolean; begin Result := MoveFileAtReboot(Path, ''); end; ◆◆ KHC04052 : http://member.nifty.ne.jp/tinymouse/ : Tiny Mouse ◆◆  Original document by Tiny Mouse 氏 ID:(KHC04052)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum