| ||||||||||||||||
|
ファイルを移動・ファイル名を置換 (要KERNEL32.DLL)
| ||||||||||||||||
同一ボリュームにおいて、ファイルやフォルダ移動は、ファイルパスの一部を変更しているに過ぎないので、 実質、移動とファイル名の変更処理は同じ処理となります。 ファイルの移動もリネームを行っているだけという今回使用するAPI関数MoveFileExは、 リネームだけ行うという性質上、異なるボリュームには移動できない形となりますが、 その関数のオプションパラメータにMOVEFILE_COPY_ALLOWED(=0x0002)を指定することで、 内部的に行うファイル複製(=CopyFile関数)と削除(=DeleteFile関数)により、 プログラマは意識することなく、同一ボリュームの移動と同じようにシミュレートできます。 指定フラグは他に移動先に同名ファイルが存在しても上書きするMOVEFILE_REPLACE_EXISTING(=0x0001)、 システムの再起動等、移動のタイミングを次回起動時に行うMOVEFILE_DELAY_UNTIL_REBOOT(=0x0004)や、 移動が完了するまで関数を終了しないMOVEFILE_WRITE_THROUGH(=0x0008)といったものがあるので、 複数指定する場合は論理和(全ての合計値)で指定を行いますが、 移動完了まで処理続行しないMOVEFILE_WRITE_THROUGHと再起動後に行うMOVEFILE_DELAY_UNTIL_REBOOT等、 中には組み合わせできないもの、しても意味がないものもあります。 尚、MOVEFILE_DELAY_UNTIL_REBOOTはNT系のみ実行可能なもので、 9X系では同一ボリュームの移動に限定されますが WindowsフォルダのWININIT.iniファイルのRenameセクションに 「移動先パス=現在のパス」形式で記述することでフォルダを除くファイルを再起動時に移動できます。 また、「NUL=現在のパス」と指定することで再起動後に削除することも可能となっています。 注意点としては、今回紹介した下記サンプルモジュールでも使用しているAPIのMoveFileExは、 Windows98以前で使用することはできません。 Windows95や98でファイル移動を行う場合は、API関数MoveFileを使用してください。 この関数は、移動先と移動元ファイルを指定するだけで、オプションフラグを指定できないものです。 当然ながら、移動・削除の権限があるユーザーでなければ処理はできませんのでお忘れなく。 | ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||