ファイルのコピーと削除 <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