在C++中,你可以使用truncate()
函數來實現文件備份
#include<iostream>
#include <fstream>
#include <cstring>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
bool backupFile(const std::string &src, const std::string &dst) {
int src_fd = open(src.c_str(), O_RDONLY);
if (src_fd == -1) {
std::cerr << "Error opening source file: "<< strerror(errno)<< std::endl;
return false;
}
int dst_fd = open(dst.c_str(), O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (dst_fd == -1) {
std::cerr << "Error opening destination file: "<< strerror(errno)<< std::endl;
close(src_fd);
return false;
}
struct stat st;
fstat(src_fd, &st);
off_t size = st.st_size;
sendfile(dst_fd, src_fd, nullptr, size);
close(src_fd);
close(dst_fd);
return true;
}
int main() {
std::string src_file = "source.txt";
std::string dst_file = "backup.txt";
if (backupFile(src_file, dst_file)) {
std::cout << "File backup successful!"<< std::endl;
} else {
std::cerr << "File backup failed."<< std::endl;
}
return 0;
}
這個示例中的backupFile()
函數接受兩個參數:源文件路徑(src
)和目標文件路徑(dst
)。函數首先打開源文件并獲取其文件描述符(src_fd
),然后創建或打開目標文件并獲取其文件描述符(dst_fd
)。接下來,使用sendfile()
函數將源文件的內容復制到目標文件。最后,關閉源文件和目標文件的文件描述符。
在main()
函數中,我們調用backupFile()
函數來備份一個名為source.txt
的文件到一個名為backup.txt
的文件。如果備份成功,程序將輸出"File backup successful!“,否則輸出"File backup failed.”。