Fungsi MoveFileWithProgressA (winbase.h)

Memindahkan file atau direktori, termasuk turunannya. Anda dapat menyediakan fungsi panggilan balik yang menerima pemberitahuan kemajuan.

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

Sintaks

BOOL MoveFileWithProgressA(
  [in]           LPCSTR             lpExistingFileName,
  [in, optional] LPCSTR             lpNewFileName,
  [in, optional] LPPROGRESS_ROUTINE lpProgressRoutine,
  [in, optional] LPVOID             lpData,
  [in]           DWORD              dwFlags
);

Parameter

[in] lpExistingFileName

Nama file atau direktori yang ada 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, namanya 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 memilih untuk menghapus batasan MAX_PATH tanpa menambahkan sebelumnya "\\?\". Lihat bagian "Batasan Panjang Jalur Maksimum" di Penamaan File, Jalur, dan Namespace untuk detailnya.

[in, optional] lpNewFileName

Nama baru file atau direktori pada komputer lokal.

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

Saat memindahkan direktori, lpExistingFileName dan lpNewFileName harus berada di drive yang sama.

Jika dwFlags menentukan MOVEFILE_DELAY_UNTIL_REBOOT dan lpNewFileName adalah NULL, MoveFileWithProgress mendaftarkan lpExistingFileName untuk dihapus saat sistem dimulai ulang. Fungsi gagal jika tidak dapat mengakses registri untuk menyimpan informasi tentang operasi penghapusan. Jika lpExistingFileName mengacu pada direktori, sistem akan menghapus direktori saat dihidupkan ulang hanya jika direktori kosong.

Secara default, namanya 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 memilih untuk menghapus batasan MAX_PATH tanpa menambahkan sebelumnya "\\?\". Lihat bagian "Batasan Panjang Jalur Maksimum" di Penamaan File, Jalur, dan Namespace untuk detailnya.

[in, optional] lpProgressRoutine

Penunjuk ke fungsi panggilan balik CopyProgressRoutine yang dipanggil setiap kali bagian lain dari file telah dipindahkan. Fungsi panggilan balik dapat berguna jika Anda menyediakan antarmuka pengguna yang menampilkan kemajuan operasi. Parameter ini bisa NULL.

[in, optional] lpData

Argumen yang akan diteruskan ke fungsi panggilan balik CopyProgressRoutine . Parameter ini bisa NULL.

[in] dwFlags

Opsi pemindahan. 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 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 .

Nilai ini tidak dapat digunakan jika lpNewFileName atau lpExistingFileName menamai direktori.

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 disiram 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. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Saat memindahkan file di seluruh volume, jika lpProgressRoutine kembali PROGRESS_CANCEL karena pengguna membatalkan operasi, MoveFileWithProgress akan mengembalikan nol dan GetLastError akan mengembalikan ERROR_REQUEST_ABORTED. File yang ada dibiarkan utuh.

Saat memindahkan file di seluruh volume, jika lpProgressRoutine mengembalikan PROGRESS_STOP karena pengguna menghentikan operasi, MoveFileWithProgress akan mengembalikan nol dan GetLastError akan mengembalikan ERROR_REQUEST_ABORTED. File yang ada dibiarkan utuh.

Keterangan

Fungsi MoveFileWithProgress 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 Anda akan 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 yang lain.

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 Berbagi File Peluasan Skala (SO) Ya
Sistem File Volume Bersama Kluster (CsvFS) Ya
Sistem File Tangguh (ReFS) Ya
 

CsvF akan melakukan IO yang dialihkan untuk file terkompresi.

Catatan

Header winbase.h mendefinisikan MoveFileWithProgress sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta praprosesor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

Persyaratan

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

Lihat juga

CopyFileEx

CopyProgressRoutine

Fungsi Manajemen File

MoveFileEx

MoveFileTransacted