Fungsi MoveFileExA (winbase.h)

Memindahkan file atau direktori yang ada, termasuk turunannya, dengan berbagai opsi pemindahan.

Fungsi MoveFileWithProgress setara dengan fungsi MoveFileEx , kecuali bahwa MoveFileWithProgress memungkinkan Anda untuk memberikan fungsi panggilan balik yang menerima pemberitahuan kemajuan.

Untuk melakukan operasi ini sebagai operasi yang ditransaksikan, gunakan fungsi MoveFileTransacted .

Sintaks

BOOL MoveFileExA(
  [in]           LPCSTR lpExistingFileName,
  [in, optional] LPCSTR lpNewFileName,
  [in]           DWORD  dwFlags
);

Parameter

[in] lpExistingFileName

Nama file atau direktori saat ini pada komputer lokal.

Jika dwFlags menentukan MOVEFILE_DELAY_UNTIL_REBOOT, file tidak dapat ada pada berbagi jarak jauh, karena operasi tertunda dilakukan sebelum jaringan tersedia.

Secara default, nama terbatas pada MAX_PATH karakter. Untuk memperpanjang batas ini menjadi 32.767 karakter lebar, tambahkan "\\?\" ke jalur. Untuk informasi selengkapnya, lihat Menamai File, Jalur, dan Namespace.

Tip

Dimulai dengan Windows 10, Versi 1607, Anda dapat ikut serta untuk menghapus batasan MAX_PATH tanpa menambahkan awalan "\\?\". Lihat bagian "Batasan Panjang Jalur Maksimum" dari Penamaan File, Jalur, dan Namespace untuk detailnya.

[in, optional] lpNewFileName

Nama baru file atau direktori pada komputer lokal.

Saat memindahkan file, tujuannya dapat berada di sistem file atau volume yang berbeda. Jika tujuan berada di drive lain, Anda harus mengatur bendera MOVEFILE_COPY_ALLOWED di dwFlags.

Saat memindahkan direktori, tujuan harus berada di drive yang sama.

Jika dwFlags menentukan MOVEFILE_DELAY_UNTIL_REBOOT dan lpNewFileName adalah NULL, MoveFileEx mendaftarkan file lpExistingFileName yang akan dihapus saat sistem dimulai ulang. Jika lpExistingFileName mengacu pada direktori, sistem akan menghapus direktori saat dihidupkan ulang hanya jika direktori kosong.

Secara default, nama terbatas pada MAX_PATH karakter. Untuk memperpanjang batas ini menjadi 32.767 karakter lebar, tambahkan "\\?\" ke jalur. Untuk informasi selengkapnya, lihat Menamai File, Jalur, dan Namespace.

Tip

Dimulai dengan Windows 10, Versi 1607, Anda dapat ikut serta untuk menghapus batasan MAX_PATH tanpa menambahkan awalan "\\?\". Lihat bagian "Batasan Panjang Jalur Maksimum" dari Penamaan File, Jalur, dan Namespace untuk detailnya.

[in] dwFlags

Parameter ini bisa menjadi satu atau beberapa nilai berikut.

Nilai Makna
MOVEFILE_COPY_ALLOWED
2 (0x2)
Jika file akan dipindahkan ke volume yang berbeda, fungsi mensimulasikan pemindahan dengan menggunakan fungsi CopyFile dan DeleteFile .

Jika file berhasil disalin ke volume yang berbeda dan file asli tidak dapat dihapus, fungsi berhasil membiarkan file sumber tetap utuh.

Nilai ini tidak dapat digunakan dengan MOVEFILE_DELAY_UNTIL_REBOOT.

MOVEFILE_CREATE_HARDLINK
16 (0x10)
Disiapkan untuk penggunaan masa mendatang.
MOVEFILE_DELAY_UNTIL_REBOOT
4 (0x4)
Sistem tidak memindahkan file hingga sistem operasi dimulai ulang. Sistem memindahkan file segera setelah AUTOCHK dijalankan, tetapi sebelum membuat file halaman apa pun. Akibatnya, parameter ini memungkinkan fungsi untuk menghapus file halaman dari startup sebelumnya.

Nilai ini hanya dapat digunakan jika prosesnya berada dalam konteks pengguna yang termasuk dalam grup administrator atau akun LocalSystem.

Nilai ini tidak dapat digunakan dengan MOVEFILE_COPY_ALLOWED.

MOVEFILE_FAIL_IF_NOT_TRACKABLE
32 (0x20)
Fungsi gagal jika file sumber adalah sumber tautan, tetapi file tidak dapat dilacak setelah pemindahan. Situasi ini dapat terjadi jika tujuan adalah volume yang diformat dengan sistem file FAT.
MOVEFILE_REPLACE_EXISTING
1 (0x1)
Jika file bernama lpNewFileName ada, fungsi mengganti kontennya dengan konten file lpExistingFileName , asalkan persyaratan keamanan mengenai daftar kontrol akses (ACL) terpenuhi. Untuk informasi selengkapnya, lihat bagian Keterangan dari topik ini.

Jika lpNewFileName menamai direktori yang ada, kesalahan akan dilaporkan.

MOVEFILE_WRITE_THROUGH
8 (0x8)
Fungsi tidak kembali sampai file benar-benar dipindahkan pada disk.

Mengatur nilai ini menjamin bahwa pemindahan yang dilakukan sebagai operasi salin dan hapus dibersihkan ke disk sebelum fungsi kembali. Flush terjadi di akhir operasi salin.

Nilai ini tidak berpengaruh jika MOVEFILE_DELAY_UNTIL_REBOOT diatur.

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol (0). Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Jika parameter dwFlags menentukan MOVEFILE_DELAY_UNTIL_REBOOT, MoveFileEx gagal jika tidak dapat mengakses registri. Fungsi ini menyimpan lokasi file yang akan diganti namanya saat dimulai ulang dalam nilai registri berikut: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

Nilai registri ini berjenis REG_MULTI_SZ. Setiap operasi ganti nama menyimpan salah satu string yang dihentikan NULL berikut, tergantung pada apakah penggantian nama adalah penghapusan atau tidak:

  • szDstFile\0\0
  • szSrcFile\0szDstFile\0
String szDstFile\0\0 menunjukkan bahwa file szDstFile akan dihapus saat reboot. String szSrcFile\0szDstFile\0 menunjukkan bahwa szSrcFile akan diganti namanya menjadi szDstFile pada reboot.
Catatan Meskipun \0\0 secara teknis tidak diperbolehkan dalam simpul REG_MULTI_SZ , itu bisa karena file dianggap diganti namanya menjadi nama null.
 
Sistem menggunakan entri registri ini untuk menyelesaikan operasi saat dimulai ulang dalam urutan yang sama dengan yang dikeluarkan. Misalnya, fragmen kode berikut membuat entri registri yang menghapus szDstFile dan mengganti nama szSrcFile menjadi szDstFile saat restart:
MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
MoveFileEx(szSrcFile, szDstFile, MOVEFILE_DELAY_UNTIL_REBOOT);

Karena operasi pemindahan dan penghapusan aktual yang ditentukan dengan bendera MOVEFILE_DELAY_UNTIL_REBOOT terjadi setelah aplikasi panggilan berhenti berjalan, nilai yang dikembalikan tidak dapat mencerminkan keberhasilan atau kegagalan dalam memindahkan atau menghapus file. Sebaliknya, ini mencerminkan keberhasilan atau kegagalan dalam menempatkan entri yang sesuai ke dalam registri.

Sistem menghapus direktori yang ditandai untuk dihapus dengan bendera MOVEFILE_DELAY_UNTIL_REBOOT hanya jika kosong. Untuk memastikan penghapusan direktori, pindahkan atau hapus semua file dari direktori sebelum mencoba menghapusnya. File mungkin berada di direktori pada waktu boot, tetapi harus dihapus atau dipindahkan sebelum sistem dapat menghapus direktori.

Operasi pemindahan dan penghapusan dilakukan pada waktu boot dalam urutan yang sama dengan yang ditentukan dalam aplikasi panggilan. Untuk menghapus direktori yang memiliki file di dalamnya pada waktu boot, pertama-tama hapus file.

Jika file dipindahkan di seluruh volume, MoveFileEx tidak memindahkan deskriptor keamanan dengan file . File diberi pendeskripsi keamanan default di direktori tujuan.

Fungsi MoveFileEx mengoordinasikan operasinya dengan layanan pelacakan tautan , sehingga sumber tautan dapat dilacak saat dipindahkan.

Untuk menghapus atau mengganti nama file, Anda harus memiliki izin hapus pada file atau menghapus izin anak di direktori induk. Jika Anda menyiapkan direktori dengan semua akses kecuali menghapus dan menghapus anak dan ACL file baru diwariskan, maka Anda harus dapat membuat file tanpa dapat menghapusnya. Namun, Anda kemudian dapat membuat file, dan mendapatkan semua akses yang Anda minta pada handel yang dikembalikan kepada Anda pada saat Anda membuat file. Jika Anda meminta izin hapus pada saat Anda membuat file, Anda dapat menghapus atau mengganti nama file dengan handel tersebut tetapi tidak dengan handel lain. Untuk informasi selengkapnya, lihat Keamanan File dan Hak Akses.

Di Windows 8 dan Windows Server 2012, fungsi ini didukung oleh teknologi berikut.

Teknologi Didukung
Protokol Server Message Block (SMB) 3.0 Ya
SMB 3.0 Transparent Failover (TFO) Ya
SMB 3.0 dengan Scale-out File Shares (SO) Ya
Sistem File Volume Bersama Kluster (CsvFS) Ya
Sistem File Tangguh (ReFS) Ya
 

Contoh

Misalnya, lihat Membuat dan Menggunakan File Sementara.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header winbase.h (termasuk Windows.h)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

CopyFile

DeleteFile

Fungsi Manajemen File

Keamanan File dan Hak Akses

GetWindowsDirectory

MoveFileTransacted

MoveFileWithProgress

WritePrivateProfileString