gpt4 book ai didi

c++ - "rename"禁止复制文件

转载 作者:行者123 更新时间:2023-11-30 01:02:22 24 4
gpt4 key购买 nike

rename如果 newname 指向不同的驱动器,实际上会复制文件(至少在 Windows 10 平台上)。

有没有办法避免这种情况?我希望它在这种情况下失败。

假设我要移动 100 GB 的文件。如果可能的话,我想重命名它。如果没有 - 我想使用我自己的复制功能并向用户显示操作进度。

最佳答案

您可以尝试创建指向新目的地的硬链接(hard link)。如果失败,那就失败了。如果成功,则删除原始文件。我验证了这适用于 Linux(g++ 8.3.1 和 clang++ 7.0.1)和 Windows(VS2019)上的文件(而不是目录),并期望它也适用于大多数其他现代操作系统:es。需要 C++17(或旧编译器的 boost)。

#include <filesystem>
#include <iostream>
#include <string_view>
#include <vector>

bool my_rename(const std::string_view from, const std::string_view to,
std::error_code& ec)
{
// create hard link
std::filesystem::create_hard_link(from, to, ec);

if(ec) return false; // it failed

// remove the original
return std::filesystem::remove(from, ec);
}

int cppmain(const std::string_view program, std::vector<std::string_view> args) {
if(args.size() != 2) {
std::cerr << "USAGE: " << program << " <source> <target>\n";
return 1;
}

std::error_code ec;

if(my_rename(args[0], args[1], ec) == false) {
std::cerr << program << ": " << ec << "\n";
return 1;
}

return 0;
}

int main(int argc, char* argv[]) {
return cppmain(argv[0], {argv + 1, argv + argc});
}

关于c++ - "rename"禁止复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com