C++17 文件与目录操作 <filesystem>

这篇具有很好参考价值的文章主要介绍了C++17 文件与目录操作 <filesystem>。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

路径操作

目录遍历

文件检查和操作

总结


每次写C++进行目录操作时,我一般都是调平台的SDK,尤其是win32 api 非常难记,于是查一下文档看看有没有和Python中os模块一样好用的库。

于是发现 filesystem,从来没用过(我的第六版C++ primer 最新标准只介绍了C++11)

用法整理如下,仅供参考

当你需要对计算机上的文件和目录进行操作时,C++17标准库中的<filesystem>头文件可以为你提供方便的工具。它提供了一系列的类和函数来处理文件和目录的操作,包括路径操作、目录遍历、文件检查、文件操作等等。本文将为你介绍<filesystem>头文件的使用方法和功能。

当你需要对计算机上的文件和目录进行操作时,C++17标准库中的<filesystem>头文件可以为你提供方便的工具。它提供了一系列的类和函数来处理文件和目录的操作,包括路径操作、目录遍历、文件检查、文件操作等等。本文将为你介绍<filesystem>头文件的使用方法和功能。

路径操作

<filesystem>头文件中的path类用于表示文件或目录的路径。你可以使用各种运算符和函数来操作路径。

首先,你可以使用/运算符来将路径组合起来。例如:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p1 = "C:/Users/";
  fs::path p2 = "John/Documents/";
  fs::path p3 = p1 / p2;
  std::cout << p3 << std::endl;
  return 0;
}

上面的代码将输出"C:/Users/John/Documents",这是将两个路径组合起来的结果。

你还可以使用+=运算符将路径附加到现有路径上:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p1 = "C:/Users/";
  fs::path p2 = "John/Documents/";
  p1 += p2;
  std::cout << p1 << std::endl;
  return 0;
}

上面的代码将输出"C:/Users/John/Documents",这是将路径附加到现有路径的结果。

如果你需要比较两个路径,你可以使用==!=运算符来比较它们是否相等:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p1 = "C:/Users/John/Documents/";
  fs::path p2 = "C:/Users/Jane/Documents/";
  if (p1 == p2) {
    std::cout << "The paths are equal" << std::endl;
  } else {
    std::cout << "The paths are not equal" << std::endl;
  }
  return 0;
}

上面的代码将输出"The paths are not equal",这是因为两个路径不相等。

除了运算符,path类还提供了一些有用的函数来操作路径。例如,你可以使用parent_path()函数来获取路径中的父目录:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p = "C:/Users/John/Documents/report.txt";
  fs::path parent = p.parent_path();
  std::cout << parent << std::endl;
  return 0;
}

上面的代码将输出"C:/Users/John/Documents",这是路径中的父目录。

你还可以使用stem()函数来获取路径中的文件名(不包括扩展名):

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p = "C:/Users/John/Documents/report.txt";
fs::path filename = p.stem();
std::cout << filename << std::endl;
return 0;
}

上面的代码将输出`"report"`,这是文件名(不包括扩展名)。

如果你需要获取路径中的扩展名,可以使用`extension()`函数:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p = "C:/Users/John/Documents/report.txt";
  fs::path extension = p.extension();
  std::cout << extension << std::endl;
  return 0;
}

上面的代码将输出".txt",这是文件的扩展名。

目录遍历

<filesystem>头文件提供了一些函数来遍历目录中的文件和子目录。你可以使用directory_iterator类来遍历目录中的所有内容。例如,下面的代码将遍历目录"C:/Users/John/Documents"中的所有文件和子目录:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p = "C:/Users/John/Documents";
  for (auto& entry : fs::directory_iterator(p)) {
    std::cout << entry.path() << std::endl;
  }
  return 0;
}

上面的代码将输出目录中的所有文件和子目录的路径。

如果你只想遍历目录中的文件,可以使用is_regular_file()函数来判断一个条目是否是一个普通文件:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p = "C:/Users/John/Documents";
  for (auto& entry : fs::directory_iterator(p)) {
    if (fs::is_regular_file(entry)) {
      std::cout << entry.path() << std::endl;
    }
  }
  return 0;
}

上面的代码将输出目录中的所有文件的路径。

如果你只想遍历目录中的子目录,可以使用is_directory()函数来判断一个条目是否是一个目录:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p = "C:/Users/John/Documents";
  for (auto& entry : fs::directory_iterator(p)) {
    if (fs::is_directory(entry)) {
      std::cout << entry.path() << std::endl;
    }
  }
  return 0;
}

上面的代码将输出目录中的所有子目录的路径。

C++17 的 <filesystem> 标准库提供了获取当前工作目录和创建目录的功能。

获取当前工作目录的方式是通过 std::filesystem::current_path 函数来实现,它返回一个 std::filesystem::path 类型的对象,表示当前工作目录的路径。例如:

#include <filesystem>
#include <iostream>

int main() {
    std::filesystem::path currentPath = std::filesystem::current_path();
    std::cout << "Current working directory is: " << currentPath << std::endl;

    return 0;
}

创建目录的方式是通过 std::filesystem::create_directory 函数来实现,它接受一个 std::filesystem::path 类型的对象,表示要创建的目录的路径。例如:

#include <filesystem>
#include <iostream>

int main() {
    std::filesystem::path dirPath = "C:/mydir";
    if (std::filesystem::create_directory(dirPath)) {
        std::cout << "Directory created successfully." << std::endl;
    } else {
        std::cout << "Failed to create directory." << std::endl;
    }

    return 0;
}

文件检查和操作

<filesystem>头文件中的<fstream><iostream>头文件提供了一些函数来检查和操作文件。例如,你可以使用exists()函数来检查文件是否存在:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p = "C:/Users/John/Documents/report.txt";
  if (fs::exists(p)) {
    std::cout << "The file exists" << std::endl;
  } else {
    std::cout << "The file does not exist" << std::endl;
  }
  return 0;
}

上面的代码将输出"The file exists",如果文件存在的话。

你可以使用remove()函数来删除文件:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path p = "C:/Users/John/Documents/report.txt";
  if (fs::exists(p)) {
    fs::remove(p);
    std::cout << "The file was successfully deleted" << std::endl;
  } else {
    std::cout << "The file does not exist" << std::endl;
  }
  return 0;
}

上面的代码将删除文件并输出"The file was successfully deleted",如果文件存在的话。

你也可以使用copy()函数来复制文件:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path source = "C:/Users/John/Documents/report.txt";
  fs::path target = "C:/Users/John/Documents/report_copy.txt";
  if (fs::exists(source)) {
    fs::copy(source, target);
    std::cout << "The file was successfully copied" << std::endl;
  } else {
    std::cout << "The file does not exist" << std::endl;
  }
  return 0;
}

上面的代码将复制文件并输出"The file was successfully copied",如果源文件存在的话。

你还可以使用rename()函数来重命名文件:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::path old_path = "C:/Users/John/Documents/report.txt";
  fs::path new_path = "C:/Users/John/Documents/report_renamed.txt";
  if (fs::exists(old_path)) {
    fs::rename(old_path, new_path);
    std::cout << "The file was successfully renamed" << std::endl;
  } else {
    std::cout << "The file does not exist" << std::endl;
  }
  return 0;
}

上面的代码将重命名文件并输出"The file was successfully renamed",如果原文件存在的话。

总结

<filesystem>头文件提供了一组强大的工具来处理文件系统。你可以使用它来管理文件和目录,获取文件和目录的信息,以及执行文件操作。这些功能使得处理文件和目录变得更加容易,而且可移植性更好,因为<filesystem>头文件可以在多个平台上使用。文章来源地址https://www.toymoban.com/news/detail-646278.html

到了这里,关于C++17 文件与目录操作 <filesystem>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 目录和文件常见操作

    就常见的命令: pwd pwd 显示当前的目录 我以如下的目录大致结构做一个简单的例子 cd 迁移到指定的路径,可以指定相对路径和绝对路径,默认相对 .指向当前路径,…/ 指向上一级的目录。 ls 列出文件及其目录 命令选项: -F 区分文件和目录,目录后面会加上/ -a 显示隐藏文

    2024年02月13日
    浏览(37)
  • 文件目录操作——Linux命令核心

    目录 相对路径和绝对路径  查看和切换工作目录 pwd 显示当前工作目录的绝对路径 cd 切换目录 列出目录内容 ls 列出目录的内容 创建和删除目录文件夹 mkdir创建一个新目录 rmdir 删除一个空的目录 touch 创建空文件 cp复制文件或者目录 rm 删除文件或目录  mv移动文件与目录或重

    2024年02月01日
    浏览(40)
  • 【100天精通python】Day20:文件及目录操作_os模块和os.psth模块, 文件路径拼接,目录操作

    目录 专栏导读  1 文件的目录操作  os模块的一些操作目录函数​编辑

    2024年02月14日
    浏览(49)
  • 【100天精通python】Day19:文件及目录操作_基本文件操作

    目录 专栏导读  1 文件的创建打开和关闭 2.1 使用内置函数open(),close()创建打开和关闭

    2024年02月14日
    浏览(54)
  • Golang中文件目录操作的实现

    目录 文件 文件目录 文件目录操作 读取文件 一、方法一 (file.Read()) 二、方法二 (bufio读取文件) 三、方法三 (ioutil 读取方法) 写入文件 一、方法一 二、方法二 三、方法三 (ioutil写入文件) 复制文件 一、方法一 二、方法二        Golang中,文件是指计算机中存储数据的实体,

    2024年02月07日
    浏览(45)
  • 文件操作安全之-目录穿越原理篇

    本节将详细解释一下目录穿越相关内容,作为我的专栏《安全运营之网络攻击研判分析》中的一节。本文主要阐述目录穿越相关的原理,关于目录穿越攻击的流量示例,以及分析研判等内容,详见这里。 Linux系统中提供了./用以表示当前目录,…/表示上一级目录,如下是Lin

    2024年02月08日
    浏览(34)
  • Windows基础命令:目录和文件操作&文本处理&网络相关操作

    方法一:打开\\\"运行\\\"对话框(Win+R),输入cmd 也可以通过cmd /c 命令和cmd /k 命令的方式来直接运行命令(/c表示执行完命令后关闭cmd窗口;/k表示执行完命令后保留cmd窗口) 方法二:在任务栏直接搜索“cmd” 显示当前目录或改变当前目录 语法规则 (1)显示目录 显示当前驱动

    2024年02月05日
    浏览(42)
  • 【100天精通python】Day19:python文件及目录操作_基本文件操作

    目录 专栏导读  1 文件的创建打开和关闭 2.1 使用内置函数open(),close()创建打开和关闭

    2024年02月15日
    浏览(43)
  • Linux文件目录操作命令-mv命令

            mv 命令是 move 的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。  mv 命令中第二个参数类型的不同(是目标文件还是目标目录), mv 命令将文件重命名或将其移至一个新的目录中。当第二个参数类型

    2024年02月02日
    浏览(43)
  • Ubuntu 中文件和目录的操作命令

    在 Ubuntu 中,文件和目录的操作命令是非常重要的。这些命令帮助您在文件系统中创建、复制、移动、删除和查看文件和目录。以下是一些常用的文件和目录操作命令: cd cd 命令用于切换当前工作目录。 例如,要将工作目录更改为 /home/user/Documents/ 目录,可以使用以下命令:

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包