在C++中查找和移动文件

 毒菇求败的zyqy_654 发布于 2023-01-19 19:15

我是新手C++,我刚看完 4ed.现在我想实现一个小程序来帮助我管理mp3计算机中的一些文件.

我有一个.txt文件,其中包含我要移动(不复制)到新文件夹(在同一列中)的文件的所有名称(实际名称的一部分).例如,"word"和"file"中的.txt和我想将.mp3文件名包含"word"或"file"的所有文件移动到新文件夹中.希望我的描述清楚,Opps ..

我知道如何将字符串读.txtset并遍历它,但我不知道如何搜索和移动文件夹中的文件.我只想知道我还应该学习什么才能实现这个功能.我读了C++ Primer但仍然做不了多少事,真的很难过......

1 个回答
  • 要使用C++移动文件,您不必使用Boost.Filesystem等外部库,但可以使用标准功能.

    有新的文件系统API,它具有重命名功能:

    #include <iostream>
    #include <filesystem>
    
    int main() {
      try {
        std::filesystem::rename("from.txt", "to.txt");
      } catch (std::filesystem::filesystem_error& e) {
        std::cout << e.what() << '\n';
      }
      return 0;
    }
    

    缺点是编译它,你需要一个最新的C++ 17编译器.(我在gcc 8.0.1上测试过,我也需要链接-lstdc++fs).

    但是今天在任何C++编译器上应该起作用的是旧的C API,它还提供了重命名(cstdio):

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cerrno>
    
    int main() {
      if(std::rename("from.txt", "to.txt") < 0) {
        std::cout << strerror(errno) << '\n';
      }
      return 0;
    }
    

    但请注意,在这两种情况下,如果源文件系统和目标文件不在同一文件系统上,则重命名将失败.然后你会看到这样的错误:

    filesystem error: cannot rename: Invalid cross-device link [from.txt] [/tmp/to.txt]
    

    在这种情况下,您只能制作副本然后删除原始文件:

    #include <fstream>
    #include <iostream>
    #include <ios>
    #include <cstdio>
    
    int main() {
      std::ifstream in("from.txt", std::ios::in | std::ios::binary);
      std::ofstream out("to.txt", std::ios::out | std::ios::binary);
      out << in.rdbuf();
      std::remove("from.txt");
    }
    

    或者使用新的API:

    #include <iostream>
    #include <filesystem>
    
    int main()
    {
      try {
        std::filesystem::copy("from.txt", "to.txt");
        std::filesystem::remove("from.txt");
      } catch (std::filesystem::filesystem_error& e) {
        std::cout << e.what() << '\n';
      }
      return 0;
    }
    

    2023-01-19 19:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有