ファイルのコピー

Cの宣言:

BOOL CopyFile(LPCTSTR SrcFile, LPCTSTR DestFile, BOOL Exists);

VBの宣言:

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のサンプル:

/* c:\doc\aaa.txtをc:\backup\にコピーする
void DoCopyFile()
{
	CopyFile("c:\\doc\\aaa.txt", "c:\\backup\\aaa.txt", FALSE);
}

VBのサンプル:

' 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


(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。