Bagikan melalui


Fungsi MoveFileTransactedA (winbase.h)

[Microsoft sangat menyarankan pengembang menggunakan cara alternatif untuk mencapai kebutuhan aplikasi Anda. Banyak skenario yang dikembangkan TxF dapat dicapai melalui teknik yang lebih sederhana dan lebih tersedia. Selain itu, TxF mungkin tidak tersedia di versi Microsoft Windows yang akan datang. Untuk informasi lebih lanjut, dan alternatif TxF, silakan lihat Alternatif untuk menggunakan Transactional NTFS.]

Memindahkan file atau direktori yang ada, termasuk turunannya, sebagai operasi yang ditransaksikan.

Sintaks

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

Parameter

[in] lpExistingFileName

Nama file atau direktori yang ada saat ini pada komputer lokal.

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 untuk file atau direktori. Nama baru belum ada. Berkas baru mungkin ada pada sistem berkas atau kandar yang berbeda. Direktori baru harus berada di drive yang sama.

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.

Operasi tulis ke nilai registri seperti yang dirinci di bagian Keterangan adalah apa yang ditransaksikan. Pemindahan file selesai ketika komputer dimulai ulang, setelah transaksi selesai.

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)
Panggilan ke MoveFileTransacted berarti bahwa operasi file pemindahan selesai ketika operasi penerapan selesai. Bendera ini tidak perlu; tidak ada pengaruh negatif jika bendera ini ditentukan, selain perlambatan operasi. 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.

[in] hTransaction

Handel ke transaksi. Handel ini dikembalikan oleh fungsi CreateTransaction .

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, MoveFileTransacted 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, MoveFileTransacted akan mengembalikan nol dan GetLastError akan mengembalikan ERROR_REQUEST_ABORTED. File yang ada dibiarkan utuh.

Keterangan

Jika parameter dwFlags menentukan MOVEFILE_DELAY_UNTIL_REBOOT, MoveFileTransacted gagal jika tidak dapat mengakses registri. Fungsi ini secara transaksional 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 saat 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. Untuk informasi selengkapnya tentang menggunakan bendera MOVEFILE_DELAY_UNTIL_REBOOT , lihat MoveFileWithProgress.

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

Fungsi ini selalu gagal jika Anda menentukan bendera MOVEFILE_FAIL_IF_NOT_TRACKABLE ; pelacakan tidak didukung oleh TxF.

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

Teknologi Didukung
Protokol Server Message Block (SMB) 3.0 Tidak
SMB 3.0 Transparent Failover (TFO) Tidak
SMB 3.0 dengan Berbagi File Peluasan Skala (SO) Tidak
Sistem File Volume Bersama Kluster (CsvFS) Tidak
Sistem File Tangguh (ReFS) Tidak
 

SMB 3.0 tidak mendukung TxF.

Persyaratan

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

Lihat juga

CopyFileTransacted

Fungsi Manajemen File

MoveFileWithProgress

NTFS Transaksi