必须是纯c++,我知道有 "copy c:\\test.txt d:\\test.txt"
这样的 system 函数;但是我认为那是系统函数,并不是c++解决方案。或者我错了吗?
那么std::fstream
怎么样?打开一个文件进行读取,打开另一个文件进行写入,并使用std::copy
让标准库处理复制。
像这样:
void copy_file(const std::string &from, const std::string &to)
{
std::ifstream is(from, ios::in | ios::binary);
std::ofstream os(to, ios::out | ios::binary);
std::copy(std::istream_iterator<char>(is), std::istream_iterator<char>(),
std::ostream_iterator<char>(os));
}
建议使用来自Boost的copy_file
。
#include <boost/filesystem.hpp>
boost::filesystem::copy_file("c:\\test.txt","d:\\test.txt");
如果有错误,它会抛出异常。请参阅此页面获取更多文档:http://www.boost.org/doc/libs/1_48_0/libs/filesystem/v3/doc/reference.html#copy_file
std::ifstream ifs("somefile", std::ios::in | std::ios::binary);
std::ofstream ofs("newfile", std::ios::out | std::ios::binary);
ofs << ifs.rdbuf();
std::ofstream
,有一个operator<< (streambuf*)
,所以你只需将与输入流相关联的streambuf
传递给它即可。bool exists(const std::string& s) {
std::ifstream istr(s, std::ios::in | std::ios::binary);
return istr.is_open();
}
void copyfile(const std::string& from, const std::string& to) {
if (!exists(to)) {
std::ifstream ifs(from, std::ios::in | std::ios::binary);
std::ofstream ofs(to, std::ios::out | std::ios::binary);
ofs << ifs.rdbuf();
}
}
如果目标文件不存在,这将只复制文件。这是为了确保操作的正确性 :)
关于移动文件,在“标准”的C++中,我可能会像上面那样复制文件,然后删除它,执行以下操作:
if (0 != remove(from.c_str())) {
// remove failed
}
除了使用像boost
这样的东西,我不确定是否有另一种标准、可移植的方法来删除文件。