Fungsi SHFileOperationA (shellapi.h)

Menyalin, memindahkan, mengganti nama, atau menghapus objek sistem file. Fungsi ini telah digantikan di Windows Vista oleh IFileOperation.

Sintaks

int SHFileOperationA(
  [in, out] LPSHFILEOPSTRUCTA lpFileOp
);

Parameter

[in, out] lpFileOp

Jenis: LPSHFILEOPSTRUCT

Penunjuk ke struktur SHFILEOPSTRUCT yang berisi informasi yang diperlukan fungsi ini untuk melakukan operasi yang ditentukan. Parameter ini harus berisi nilai valid yang bukan NULL. Anda bertanggung jawab untuk memvalidasi nilai. Jika Anda tidak memvalidasinya, Anda akan mengalami hasil yang tidak terduga.

Nilai kembali

Jenis: int

Mengembalikan nol jika berhasil; jika tidak nol. Aplikasi biasanya hanya harus memeriksa nol atau nonzero.

Adalah praktik yang baik untuk memeriksa nilai anggota fAnyOperationsAborted dari SHFILEOPSTRUCT. SHFileOperation dapat mengembalikan 0 agar berhasil jika pengguna membatalkan operasi. Jika Anda tidak memeriksa fAnyOperationsAborted serta nilai pengembalian, Anda tidak dapat mengetahui bahwa fungsi menyelesaikan tugas penuh yang Anda minta dan Anda mungkin melanjutkan dengan asumsi yang salah.

Jangan gunakan GetLastError dengan nilai pengembalian fungsi ini.

Untuk memeriksa nilai bukan nol untuk tujuan pemecahan masalah, nilai tersebut sebagian besar memetakan ke nilai yang ditentukan dalam Winerror.h. Namun, beberapa nilai pengembalian yang mungkin didasarkan pada kode kesalahan pra-Win32, yang dalam beberapa kasus tumpang tindih dengan nilai Winerror.h nanti tanpa mencocokkan maknanya. Nilai-nilai tertentu tersebut dirinci di sini, dan untuk nilai-nilai spesifik ini hanya makna-makna ini yang harus diterima melalui kode Winerror.h. Namun, nilai-nilai ini disediakan dengan peringatan ini:

  • Ini adalah kode kesalahan pra-Win32 dan tidak lagi didukung atau didefinisikan dalam file header publik apa pun. Untuk menggunakannya, Anda harus menentukannya sendiri atau membandingkannya dengan nilai numerik.
  • Kode kesalahan ini dapat berubah dan secara historis melakukannya.
  • Nilai-nilai ini hanya disediakan sebagai bantuan dalam penelusuran kesalahan. Mereka tidak boleh dianggap sebagai definitif.
Kode Kesalahan Nilai Makna
DE_SAMEFILE 0x71 File sumber dan tujuan adalah file yang sama.
DE_MANYSRC1DEST 0x72 Beberapa jalur file ditentukan dalam buffer sumber, tetapi hanya satu jalur file tujuan.
DE_DIFFDIR 0x73 Operasi ganti nama ditentukan tetapi jalur tujuan adalah direktori yang berbeda. Gunakan operasi pemindahan sebagai gantinya.
DE_ROOTDIR 0x74 Sumber adalah direktori akar, yang tidak dapat dipindahkan atau diganti namanya.
DE_OPCANCELLED 0x75 Operasi dibatalkan oleh pengguna, atau dibatalkan secara diam-diam jika bendera yang sesuai diberikan ke SHFileOperation.
DE_DESTSUBTREE 0x76 Tujuannya adalah subtree sumber.
DE_ACCESSDENIEDSRC 0x78 Pengaturan keamanan menolak akses ke sumber.
DE_PATHTOODEEP 0x79 Jalur sumber atau tujuan terlampaui atau akan melebihi MAX_PATH.
DE_MANYDEST 0x7A Operasi ini melibatkan beberapa jalur tujuan, yang dapat gagal dalam kasus operasi pemindahan.
DE_INVALIDFILES 0x7C Jalur di sumber atau tujuan atau keduanya tidak valid.
DE_DESTSAMETREE 0x7D Sumber dan tujuan memiliki folder induk yang sama.
DE_FLDDESTISFILE 0x7E Jalur tujuan adalah file yang sudah ada.
DE_FILEDESTISFLD 0x80 Jalur tujuan adalah folder yang sudah ada.
DE_FILENAMETOOLONG 0x81 Nama file melebihi MAX_PATH.
DE_DEST_IS_CDROM 0x82 Tujuannya adalah CD-ROM baca-saja, mungkin tidak diformat.
DE_DEST_IS_DVD 0x83 Tujuannya adalah DVD baca-saja, mungkin tidak diformat.
DE_DEST_IS_CDRECORD 0x84 Tujuannya adalah CD-ROM bisa-tulis, mungkin tidak diformat.
DE_FILE_TOO_LARGE 0x85 File yang terlibat dalam operasi terlalu besar untuk media tujuan atau sistem file.
DE_SRC_IS_CDROM 0x86 Sumbernya adalah CD-ROM baca-saja, mungkin tidak diformat.
DE_SRC_IS_DVD 0x87 Sumbernya adalah DVD baca-saja, mungkin tidak diformat.
DE_SRC_IS_CDRECORD 0x88 Sumbernya adalah CD-ROM bisa-tulis, mungkin tidak diformat.
DE_ERROR_MAX 0xB7 MAX_PATH terlampaui selama operasi.
0x402 Terjadi kesalahan yang tidak diketahui. Ini biasanya karena jalur yang tidak valid di sumber atau tujuan. Kesalahan ini tidak terjadi pada Windows Vista dan yang lebih baru.
ERRORONDEST 0x10000 Terjadi kesalahan yang tidak ditentukan pada tujuan.
DE_ROOTDIR | ERRORONDEST 0x10074 Tujuan adalah direktori akar dan tidak dapat diganti namanya.

Keterangan

Anda harus menggunakan nama jalur yang sepenuhnya memenuhi syarat dengan fungsi ini. Menggunakannya dengan nama jalur relatif tidak aman untuk utas.

Dengan dua pengecualian, Anda tidak dapat menggunakan SHFileOperation untuk memindahkan folder khusus dari drive lokal ke komputer jarak jauh dengan menentukan jalur jaringan. Pengecualiannya adalah folder Dokumen Saya (CSIDL_PERSONAL, CSIDL_DOCUMENTS) dan Gambar Saya (CSIDL_MYPICTURES).

Ketika digunakan untuk menghapus file, SHFileOperation menghapus file secara permanen kecuali Anda mengatur bendera FOF_ALLOWUNDO di anggota fFlags struktur SHFILEOPSTRUCT yang ditunjukkan oleh lpFileOp. Pengaturan bendera tersebut mengirimkan file ke Keranjang Sampah. Jika Anda hanya ingin menghapus file dan menjamin bahwa file tersebut tidak ditempatkan di Keranjang Sampah, gunakan DeleteFile.

Jika handler panggilan balik salinan diekspos dan terdaftar, SHFileOperation memanggilnya kecuali Anda mengatur bendera seperti FOF_NOCONFIRMATION di anggota fFlags struktur yang diarahkan oleh lpFileOp. Lihat ICopyHook::CopyCallback untuk detail tentang menerapkan penanganan panggilan balik salin.

Penghapusan file bersifat rekursif kecuali Anda mengatur bendera FOF_NORECURSION di lpFileOp.

Menyambungkan File

Dengan Windows 2000 atau yang lebih baru, dimungkinkan untuk menyambungkan file HTML dengan folder yang berisi file terkait seperti gambar Graphics Interchange Format (GIF) atau lembar gaya. Jika koneksi file diaktifkan, saat Anda memindahkan atau menyalin file HTML, folder yang tersambung dan semua filenya juga dipindahkan atau disalin. Sebaliknya, jika Anda memindahkan folder dengan file terkait, file HTML juga dipindahkan.

File HTML harus memiliki ekstensi .htm atau .html. Anda membuat koneksi ke file terkait dengan menempatkan folder yang berisinya ke dalam folder yang sama dengan file HTML. Nama folder yang berisi file yang terhubung harus sama dengan nama file HTML diikuti dengan "_files" atau ".files" (ini peka huruf besar/kecil; misalnya, ". File" tidak berfungsi). Contoh diberikan di sini.

  1. Buat file bernama Test.htm di direktori C:\Files (C:\Files\Test.htm).
  2. Buat folder baru bernama Test.files di direktori C:\Files (C:\Files\Test.files).
  3. Isi folder dengan beberapa file. File apa pun yang ditempatkan di folder ini tersambung ke Test.htm.
  4. Pindahkan atau salin file Test.htm ke direktori C:\Files2.
  5. Perhatikan bahwa direktori Test.files sekarang ditemukan di direktori C:\Files2 juga.

Koneksi file diaktifkan secara default. Ini dapat dinonaktifkan dengan menambahkan entri REG_DWORD , NoFileFolderConnection, seperti yang ditunjukkan di sini:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  NoFileFolderConnection

Mengatur NoFileFolderConnection ke 1 menonaktifkan koneksi file. Jika nilai diatur ke nol atau hilang, koneksi file diaktifkan.

Untuk memindahkan hanya file yang ditentukan dan tidak ada file yang terhubung, atur bendera FOF_NO_CONNECTED_ELEMENTS di anggota fFlags struktur yang diarahkan oleh lpFileOp.

Perhatikan bahwa penggunaan folder dengan nama seperti "MyFile_files" untuk menentukan koneksi mungkin tidak valid untuk versi Windows yang dilokalkan. Istilah "file" mungkin perlu digantikan oleh kata yang setara dalam bahasa lokal.

Catatan

Header shellapi.h mendefinisikan SHFileOperation 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 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header shellapi.h
Pustaka Shell32.lib
DLL Shell32.dll (versi 4.0 atau yang lebih baru)
Set API ext-ms-win-shell-shell32-l1-2-1 (diperkenalkan dalam Windows 10, versi 10.0.10240)