1 /* $Id: move.c,v 1.5 2002/04/27 19:15:43 hbirr Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/kernel32/file/file.c
6 * PURPOSE: Directory functions
7 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
12 /* INCLUDES *****************************************************************/
14 #include <ddk/ntddk.h>
16 #include <ntos/minmax.h>
19 #include <kernel32/kernel32.h>
22 #define FILE_RENAME_SIZE MAX_PATH +sizeof(FILE_RENAME_INFORMATION)
25 /* FUNCTIONS ****************************************************************/
30 LPCSTR lpExistingFileName
,
34 return MoveFileExA (lpExistingFileName
,
36 MOVEFILE_COPY_ALLOWED
);
43 LPCSTR lpExistingFileName
,
48 UNICODE_STRING ExistingFileNameU
;
49 UNICODE_STRING NewFileNameU
;
50 ANSI_STRING ExistingFileName
;
51 ANSI_STRING NewFileName
;
54 RtlInitAnsiString (&ExistingFileName
,
55 (LPSTR
)lpExistingFileName
);
57 RtlInitAnsiString (&NewFileName
,
58 (LPSTR
)lpNewFileName
);
60 /* convert ansi (or oem) string to unicode */
63 RtlAnsiStringToUnicodeString (&ExistingFileNameU
,
66 RtlAnsiStringToUnicodeString (&NewFileNameU
,
72 RtlOemStringToUnicodeString (&ExistingFileNameU
,
75 RtlOemStringToUnicodeString (&NewFileNameU
,
80 Result
= MoveFileExW (ExistingFileNameU
.Buffer
,
84 RtlFreeHeap (RtlGetProcessHeap (),
86 ExistingFileNameU
.Buffer
);
87 RtlFreeHeap (RtlGetProcessHeap (),
98 LPCWSTR lpExistingFileName
,
102 return MoveFileExW (lpExistingFileName
,
104 MOVEFILE_COPY_ALLOWED
);
111 LPCWSTR lpExistingFileName
,
112 LPCWSTR lpNewFileName
,
117 IO_STATUS_BLOCK IoStatusBlock
;
118 FILE_RENAME_INFORMATION
*FileRename
;
119 USHORT Buffer
[FILE_RENAME_SIZE
];
122 hFile
= CreateFileW (lpExistingFileName
,
124 FILE_SHARE_WRITE
|FILE_SHARE_READ
,
127 FILE_ATTRIBUTE_NORMAL
,
130 FileRename
= (FILE_RENAME_INFORMATION
*)Buffer
;
131 if ((dwFlags
& MOVEFILE_REPLACE_EXISTING
) == MOVEFILE_REPLACE_EXISTING
)
132 FileRename
->Replace
= TRUE
;
134 FileRename
->Replace
= FALSE
;
136 FileRename
->FileNameLength
= wcslen (lpNewFileName
);
137 memcpy (FileRename
->FileName
,
139 min(FileRename
->FileNameLength
, MAX_PATH
));
141 errCode
= NtSetInformationFile (hFile
,
145 FileRenameInformation
);
147 if (!NT_SUCCESS(errCode
))
149 if (CopyFileW (lpExistingFileName
,
151 FileRename
->Replace
))
152 DeleteFileW (lpExistingFileName
);