BOOL CopyFile(LPCTSTR SrcFile, LPCTSTR DestFile, BOOL Exists);
Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" ( _ ByVal SrcFile As String, _ ByVal DestFile As String, _ ByVal Exists As Long) As Long
ファイル名の指定は、ディレクトリ名だけであってはならず、ファイルの絶対パス名、または相対パス名を指定しなければならない。
ファイルの属性もコピーされる。セキュリティ属性はコピーされない。
引数の意味は、以下の通り。
SrcFile | コピー元ファイル名 |
DestFile | コピー先ファイル名 |
Exists | コピー先にsDestFileと同名のファイルが存在したとき、上書きに失敗するか否かを表すフラグ。TRUEならば、上書きに失敗する。 |
戻り値は、関数の実行に成功したか否かを表す真偽値である。
主なエラーは、以下の通り。
ERROR_FILE_NOT_FOUND | ファイル名が誤っている。 |
ERROR_PATH_NOT_FOUND | 存在しないディレクトリを指定した。 |
ERROR_FILE_EXISTS | 同名ファイルがすでに存在する |
ERROR_NOT_READY | ドライブの準備ができていない |
1235 | ドライブのアクセスに失敗した |
ERROR_ACCESS_DENIED | ディレクトリ名しか指定していない。 |
/* c:\doc\aaa.txtをc:\backup\にコピーする void DoCopyFile() { CopyFile("c:\\doc\\aaa.txt", "c:\\backup\\aaa.txt", FALSE); }
' a:\doc\aaa.txtをa:\backup\に、拡張子bakでコピーする Private Sub DoCopyFile() Dim bResult As Long 'ファイルのコピー bResult = CopyFile("a:\doc\aaa.txt", "a:\backup\aaa.bak", True) If bResult = 0 Then 'コピー失敗 MsgBox "エラー発生" If Err.LastDllError = ERROR_FILE_EXISTS Then MsgBox "コピー先に既にファイルが存在する" End If Else MsgBox "コピー成功" End If End Sub