Linux c,c++ 复制文件
时间: 2024-09-05 21:03:09 浏览: 59
在Linux环境下,C语言和C++都有多种方式可以复制文件。这里提供两种常见的方法:
1. C语言使用`fcntl`和`read` / `write`操作:
```c
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
off_t copy_file(const char *src_path, const char *dst_path) {
int src_fd = open(src_path, O_RDONLY);
if (src_fd == -1) {
perror("open source file");
return -1;
}
int dst_fd = open(dst_path, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
if (dst_fd == -1) {
close(src_fd);
perror("open destination file");
return -1;
}
off_t bytes_copied = pread(src_fd, NULL, 0, 0); // 获取源文件大小
lseek(dst_fd, 0, SEEK_SET); // 设置目标文件指针
while (bytes_copied > 0) {
ssize_t read_size = read(src_fd, &buffer[0], bytes_copied);
if (read_size <= 0) {
perror("read from source file");
break;
}
write(dst_fd, buffer, read_size);
bytes_copied -= read_size;
}
close(src_fd);
close(dst_fd);
return bytes_copied; // 返回实际复制的字节数
}
```
2. C++使用`std::ifstream`和`std::ofstream`:
```cpp
#include <fstream>
#include <iostream>
std::string copy_file(const std::string& src_path, const std::string& dst_path) {
std::ifstream in(src_path, std::ios::binary);
if (!in) {
std::cerr << "Failed to open source file: " << src_path << std::endl;
return "";
}
std::ofstream out(dst_path, std::ios::binary);
if (!out) {
in.close();
std::cerr << "Failed to open destination file: " << dst_path << std::endl;
return "";
}
std::copy(in.rdbuf()->data(), in.rdbuf()->end(), out.rdbuf());
in.close();
out.close();
return "File copied successfully";
}
```
这两种方法都确保了文件内容的一致性和完整性。在使用之前,请确保对异常处理进行了适当的考虑。
阅读全文