ファイルのコピーと削除          <TOP>


SHFileOperation ファイルシステムオブジェクトのコピー・移動・名前の変更・削除を行う

 

例では、Test1.txt を Test2.txt としてコピー、また、Test2.txt を削除しています。

 
'================================================================
'= ファイルのコピーと削除
'=    (SHFileOperation2.bas)
'================================================================
#include "Windows.bi"

#define ERROR_SUCCESS 0
#define FO_COPY &H2                     'ファイルをコピー
#define FO_DELETE &H3                   'ファイルを削除
#define FO_MOVE &H1                     'ファイルを移動
#define FO_RENAME &H4                   'ファイル名を変更
#define FOF_ALLOWUNDO &H40              'できる限りアンドゥ情報を保持。pFrom で指定されたファイル名がフルパスで指定されている必要がある。削除
#define FOF_CONFIRMMOUSE &H2            '現在使用されない
#define FOF_FILESONLY &H80              'ワイルドカードファイル名(*.*)が指定された場合にのみ操作を実行
#define FOF_MULTIDESTFILES &H1          'pTo メンバが複数のファイル名を指定していることを示す
#define FOF_NOCONFIRMATION &H10         '表示されるダイアログボックスで「はい」または「すべて」を選択するようにする
#define FOF_NOCONFIRMMKDIR &H200        '新しいディレクトリを作成する必要がある場合に、作成するかどうかの確認をしない
#define FOF_NOERRORUI &H400             'エラーが発生した場合に、ユーザーインターフェースを表示しない
#define FOF_NORECURSION &H1000          'ローカルディレクトリのみに操作を行なう。サブディレクトリに対して再帰的に操作を行なわない
#define FOF_RENAMEONCOLLISION &H8       '移動、コピー、名前の変更の操作において、指定したファイル名がすでに存在していた場合には、操作対象のフ
#define FOF_SILENT &H4                  '経過を表すダイアログボックスを表示しない
#define FOF_SIMPLEPROGRESS &H100        '経過を表すダイアログボックスにファイル名を表示しない
#define FOF_WANTMAPPINGHANDLE &H20      '
#define vbNullChar chr$(0)              'NULL文字(\0)

Type SHFILEOPSTRUCT
    hWnd                  As Long       'フォームのウインドウハンドル
    wFunc                 As Long       '処理内容(コピー・削除・移動・名前の変更)
    pFrom                 As Long       '元ファイル名(ファイル名の後ろには2つのヌル文字を入れる)
    pTo                   As Long       '新ファイル名(削除の場合は不要・ファイル名の後ろには2つのヌル文字を入れる)
    fFlags                As Integer    '動作オプション
    fAnyOperationsAborted As Long       '処理終了前にキャンセルしたときは[1]
    hNameMappings         As Long       'ファイルネームマッピングオブジェクト
    lpszProgressTitle     As Long       'ダイアログボックスのキャプション
End Type

' ファイルシステムオブジェクトのコピー・移動・名前の変更・削除を行う
Declare Function Api_SHFileOperation& Lib "shell32" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT)

Var Shared Text(1) As Object
Var Shared Button(1) As Object

For i = 0 To 1
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14
    Button(i).Attach GetDlgItem("Button" & Trim$(Str$(i + 1))) : Button(i).SetFontSize 14
Next

Var Shared sfos As SHFILEOPSTRUCT

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Text(0).SetWindowText "Test.txt"
    Text(1).SetWindowtext "Test2.txt"
End Sub

'================================================================
'= ファイルコピー
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var SrcFile As String
    Var DestFile As String
    Var Ret As Long

    SrcFile = "Test.txt" & vbNullChar & vbNullChar
    DestFile = "Test2.txt" & vbNullChar & vbNullChar


    sfos.hwnd = GethWnd
    sfos.fFlags = FOF_ALLOWUNDO
    sfos.wFunc = FO_COPY
    sfos.pFrom = StrAdr(SrcFile)
    sfos.pTo = StrAdr(DestFile)

    Ret = Api_SHFileOperation(sfos)
End Sub

'================================================================
'= ファイル削除
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var DelFile As String
    Var Ret As Long

    DelFile = "Test2.txt" & vbNullChar & vbNullChar

    sfos.hwnd = GethWnd
    sfos.fFlags = FOF_ALLOWUNDO
    sfos.wFunc = FO_DELETE
    sfos.pFrom = StrAdr(DelFile)
    sfos.pTo = 0

    Ret = Api_SHFileOperation(sfos)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End