ファイルを効率的かつ安全にコピーする方法
ファイルをコピーするときは、データ損失を防ぎ、安全性を確保するために効率と安全性を考慮することが不可欠です。コピーされたファイルの整合性。いくつかの方法を使用できますが、それぞれに長所と短所があります。
1. 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(); }
利点: シンプルで直感的。標準ストリームを使用するため安全です。
欠点: 下位レベルのメソッドほど効率的ではありません。
2. POSIX (オープン、読み取り、書き込み):
#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); } }
利点: 効率的で低レベル。
欠点: ではない標準ストリームと同じくらい安全です。手動メモリ管理が必要です。
3. mmap() システムコール:
#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); }
利点: 効率的かつ高速です。明示的なメモリ管理は必要ありません。
欠点:実装が複雑で、手動のメモリ マッピングが必要です。
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); }
利点: ポータブルで使いやすい。エラーが発生した場合でも堅牢で安全です。
欠点: 外部ライブラリが必要です。低レベルのメソッドほど効率的ではない可能性があります。
考慮すべき要素:
推奨事項:
安全性を優先した汎用ファイル コピーの場合、iostream または boost::filesystem::copy_file は
最大限の効率とパフォーマンスを得るには、POSIX または mmap() を使用できますが、適切なメモリ管理とエラー処理を確保するために特別な注意を払う必要があります。
以上がC でファイルをコピーするための最も効率的で安全な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。