Copies an existing file to a new file, notifying the application of its progress through a callback
function.
To perform this operation as a transacted operation, use the CopyFileTransacted function.
Syntax
BOOL WINAPI CopyFileEx(
__in LPCTSTR lpExistingFileName,
__in LPCTSTR lpNewFileName,
__in_opt LPPROGRESS_ROUTINE lpProgressRoutine,
__in_opt LPVOID lpData,
__in_opt LPBOOL pbCancel,
__in DWORD dwCopyFlags
);
Parameters
- lpExistingFileName [in]
-
The name of an existing file.
In the ANSI version of this function, the name is limited to MAX_PATH characters.
To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to
the path. For more information, see
Naming a File.
If lpExistingFileName does not exist, the
CopyFileEx function fails, and the
GetLastError function returns
ERROR_FILE_NOT_FOUND.
- lpNewFileName [in]
-
The name of the new file.
In the ANSI version of this function, the name is limited to MAX_PATH characters.
To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to
the path. For more information, see
Naming a File.
- lpProgressRoutine [in, optional]
-
The address of a callback function of type LPPROGRESS_ROUTINE that is called
each time another portion of the file has been copied. This parameter can be NULL. For
more information on the progress callback function, see the
CopyProgressRoutine function.
- lpData [in, optional]
-
The argument to be passed to the callback function. This parameter can be
NULL.
- pbCancel [in, optional]
-
If this flag is set to TRUE during the copy operation, the operation is canceled.
Otherwise, the copy operation will continue to completion.
- dwCopyFlags [in]
-
Flags that specify how the file is to be copied. This parameter can be a combination of the following
values.
| Value | Meaning |
- COPY_FILE_ALLOW_DECRYPTED_DESTINATION
- 0x00000008
| An attempt to copy an encrypted file will succeed even if the destination copy cannot be encrypted.
Windows 2000: This value is not supported.
|
- COPY_FILE_COPY_SYMLINK
- 0x00000800
| If the source file is a symbolic link, the destination file is also a symbolic link pointing to the same
file that the source symbolic link is pointing to.
Windows Server 2003 and Windows XP/2000: This value is not supported.
|
- COPY_FILE_FAIL_IF_EXISTS
- 0x00000001
| The copy operation fails immediately if the target file already exists.
|
- COPY_FILE_NO_BUFFERING
- 0x00001000
| The copy operation is performed using unbuffered I/O, bypassing system I/O cache resources. Recommended for very large file transfers.
Windows Server 2003 and Windows XP/2000: This value is not supported.
|
- COPY_FILE_OPEN_SOURCE_FOR_WRITE
- 0x00000004
| The file is copied and the original file is opened for write access.
|
- COPY_FILE_RESTARTABLE
- 0x00000002
| Progress of the copy is tracked in the target file in case the copy fails. The failed copy can be
restarted at a later time by specifying the same values for lpExistingFileName and
lpNewFileName as those used in the call that failed.
|
Return Value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information call
GetLastError.
If lpProgressRoutine returns PROGRESS_CANCEL due to the
user canceling the operation, CopyFileEx will return zero
and GetLastError will return
ERROR_REQUEST_ABORTED. In this case, the partially copied destination file is
deleted.
If lpProgressRoutine returns PROGRESS_STOP due to the
user stopping the operation, CopyFileEx will return zero
and GetLastError will return
ERROR_REQUEST_ABORTED. In this case, the partially copied destination file is left
intact.
Remarks
This function preserves extended attributes, OLE structured storage, NTFS file system alternate data streams,
and file attributes. Security attributes for the existing file are not copied to the new file. To copy security
attributes, use the SHFileOperation function.
This function fails with ERROR_ACCESS_DENIED if the destination file already exists
and has the FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_READONLY
attribute set.
When encrypted files are copied using CopyFileEx, the
function attempts to encrypt the destination file with the keys used in the encryption of the source file. If
this cannot be done, this function attempts to encrypt the destination file with default keys. If both of these
methods cannot be done, CopyFileEx fails with an
ERROR_ENCRYPTION_FAILED error code. If you want
CopyFileEx to complete the copy operation even if the
destination file cannot be encrypted, include the
COPY_FILE_ALLOW_DECRYPTED_DESTINATION as the value of the
dwCopyFlags parameter in your call to
CopyFileEx.
Windows 2000: When encrypted files are copied using CopyFileEx, the
function attempts to encrypt the destination file with the default keys. No attempt is made to encrypt the
destination file with the keys used in the encryption of the source file. If it cannot be encrypted,
CopyFileEx completes the copy operation without encrypting
the destination file.
If COPY_FILE_COPY_SYMLINK is specified, the following rules apply:
- If the source file is a symbolic link, the symbolic link is copied, not the target file.
- If the source file is not a symbolic link, there is no change in behavior.
- If the destination file is an existing symbolic link, the symbolic link is overwritten, not the target
file.
- If COPY_FILE_FAIL_IF_EXISTS is also specified, and the destination file is an
existing symbolic link, the operation fails in all cases.
If COPY_FILE_COPY_SYMLINK is not specified, the following rules apply:
- If COPY_FILE_FAIL_IF_EXISTS is also specified, and the destination file is an
existing symbolic link, the operation fails only if the target of the symbolic link exists.
- If COPY_FILE_FAIL_IF_EXISTS is not specified, there is no change in behavior.
If you are writing an application that is optimizing file copy operations across a LAN, consider using the TransmitFile function from Windows Sockets (Winsock). TransmitFile supports high-performance network transfers and provides a simple interface to send the contents of a file to a remote computer. To use TransmitFile, you must write a Winsock client application that sends the file from the source computer as well as a Winsock server application that uses other Winsock functions to receive the file on the remote computer.
Requirements
| Minimum supported client | Windows 2000 Professional |
| Minimum supported server | Windows 2000 Server |
| Header | WinBase.h (include Windows.h) |
| Library | Kernel32.lib |
| DLL | Kernel32.dll |
| Unicode and ANSI names | CopyFileExW (Unicode) and CopyFileExA (ANSI) |
See Also
- CopyFile
- CopyFileTransacted
- CopyProgressRoutine
- CreateFile
- File Attributes
- File Management Functions
- MoveFile
- MoveFileWithProgress
- Symbolic Links
- TransmitFile
Send comments about this topic to Microsoft
Build date: 11/12/2009