Cara Menyalin Fail Dengan Cekap dan Selamat
Apabila menyalin fail, adalah penting untuk mempertimbangkan kecekapan dan keselamatan untuk mengelakkan kehilangan data dan memastikan integriti fail yang disalin. Beberapa kaedah boleh digunakan, setiap satu dengan kekuatan dan kelemahannya:
1. Perpustakaan Standard C (iostream):
#include <iostream> #include <fstream> int main() { std::ifstream source("from.ogv", std::ios::binary); std::ofstream destination("to.ogv", std::ios::binary); destination << source.rdbuf(); }
Kelebihan: Mudah dan intuitif. Selamat kerana menggunakan aliran standard.
Kelemahan: Tidak secekap kaedah peringkat rendah.
2. POSIX (buka, baca, tulis):
#include <fcntl.h> #include <unistd.h> int main() { int source = open("from.ogv", O_RDONLY, 0); int destination = open("to.ogv", O_WRONLY | O_CREAT, 0644); char buffer[BUFSIZ]; while ((size_t)read(source, buffer, BUFSIZ) > 0) { write(destination, buffer, size); } }
Kelebihan: Cekap dan tahap rendah.
Kelemahan: Tidak selamat seperti aliran standard. Memerlukan pengurusan memori manual.
3. mmap() Panggilan Sistem:
#include <sys/mman.h> #include <sys/stat.h> #include <fcntl.h> int main() { int source = open("from.ogv", O_RDONLY, 0); int destination = open("to.ogv", O_WRONLY | O_CREAT, 0644); struct stat stat_source; fstat(source, &stat_source); char *source_ptr = (char *)mmap(NULL, stat_source.st_size, PROT_READ, MAP_PRIVATE, source, 0); char *destination_ptr = (char *)mmap(NULL, stat_source.st_size, PROT_WRITE, MAP_PRIVATE, destination, 0); memcpy(destination_ptr, source_ptr, stat_source.st_size); }
Kelebihan: Cekap dan pantas. Tidak perlu pengurusan ingatan yang jelas.
Kelemahan: Kompleks untuk dilaksanakan dan memerlukan pemetaan memori manual.
4. boost::filesystem::copy_file:
#include <boost/filesystem.hpp> int main() { boost::filesystem::copy_file("from.ogv", "to.ogv", boost::filesystem::copy_option::overwrite_if_exists); }
Kelebihan: Mudah alih dan mudah digunakan. Teguh dan selamat sekiranya berlaku ralat.
Kelemahan: Memerlukan perpustakaan luaran. Mungkin tidak secekap kaedah peringkat rendah.
Faktor yang Perlu Dipertimbangkan:
Syor:
Untuk penyalinan fail tujuan umum dengan keselamatan sebagai keutamaan, iostream atau boost::filesystem::copy_file ialah disyorkan.
Untuk kecekapan dan prestasi maksimum, POSIX atau mmap() boleh digunakan, tetapi penjagaan tambahan perlu diambil untuk memastikan pengurusan memori dan pengendalian ralat yang betul.
Atas ialah kandungan terperinci Apakah Kaedah yang Paling Cekap dan Selamat untuk Menyalin Fail dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!