针对给定源文件名及目的文件名(文件名以main函数参数方式给定),实现将源文件拷贝至目的文件。若源文件名与目的文件名相同、目的文件已存在、源文件不存在。不执行拷贝,并将信息反馈给用户。(注意,文件不一定是文本型文件,应采用字节流方式处理)
时间: 2023-12-03 17:42:55 浏览: 77
实现该功能的代码如下:
```c++
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char* argv[]) {
// 检查参数个数
if (argc != 3) {
cout << "Usage: " << argv[0] << " SOURCE_FILE DEST_FILE" << endl;
return 1;
}
// 打开源文件
ifstream source(argv[1], ios::binary);
if (!source) {
cout << "Source file not found." << endl;
return 1;
}
// 检查源文件和目标文件是否相同
string source_filename = argv[1];
string dest_filename = argv[2];
if (source_filename == dest_filename) {
cout << "Source file and destination file cannot be the same." << endl;
return 1;
}
// 检查目标文件是否已存在
ifstream dest(dest_filename, ios::binary);
if (dest) {
cout << "Destination file already exists." << endl;
return 1;
}
// 打开目标文件
ofstream dest_file(dest_filename, ios::binary);
if (!dest_file) {
cout << "Failed to create destination file." << endl;
return 1;
}
// 读取源文件并写入目标文件
char buffer[1024];
while (source.read(buffer, sizeof(buffer))) {
dest_file.write(buffer, source.gcount());
}
// 关闭文件
source.close();
dest_file.close();
cout << "File copied successfully." << endl;
return 0;
}
```
该程序首先检查参数个数是否为3,如果不是则输出用法信息并退出。然后打开源文件,如果源文件不存在则输出错误信息并退出。接着检查源文件和目标文件是否相同,如果相同则输出错误信息并退出。再检查目标文件是否已存在,如果已存在则输出错误信息并退出。然后打开目标文件,如果打开失败则输出错误信息并退出。最后使用循环读取源文件并写入目标文件,直到源文件读取完毕。最后关闭文件并输出拷贝成功的信息。
阅读全文