标签: boost-filesystem

为什么没有boost :: filesystem :: move_file?

我正在使用boost文件系统来替换像CopyFile和MoveFile这样的Windows C++函数,以便在windows和linux之间获得某种可移植性.我正在使用copy_file,但我无法找到任何移动文件,如'move_file'函数.boost有移动文件功能吗?

我非常希望使用boost,但欢迎提供其他建议.

c++ file-io boost-filesystem

17
推荐指数
1
解决办法
1万
查看次数

使用Boost.Filesystem获取平台的路径分隔符

有没有办法使用Boost.Filesystem获取平台的路径分隔符?通过路径分隔符,我的意思/是Unix和\Windows.

我已经知道我可以使用boost::filesystem::path::operator/连接适当的分隔符来连接两个路径.但我只想要/或者\.

我也知道我可以使用#ifdef _WIN32,但我更喜欢Boost.Filesystem告诉我适当的分隔符.

编辑:我想使用Boost.Filesystem API的第3版,如Boost 1.48中所使用的.

c++ boost boost-filesystem

15
推荐指数
2
解决办法
2万
查看次数

提升文件系统.is_directory永远不会工作

我一直在寻找高低,以解决这个问题,我似乎无法调试问题!

所以,这就是我所拥有的.

我通过自制软件(Mac OSX Mavericks)1.55.0安装了boost.

其他boost库工作正常,但boost::filesystem似乎无法与实际文件系统交互.

这是我如何链接它(使用QT)

macx: LIBS += -L$$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/lib/ -lboost_system-mt
macx: LIBS += -L$$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/lib/ -lboost_filesystem-mt

INCLUDEPATH += $$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/include
DEPENDPATH += $$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/include

macx: PRE_TARGETDEPS += $$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/lib/libboost_filesystem.a
macx: PRE_TARGETDEPS += $$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/lib/libboost_system.a
Run Code Online (Sandbox Code Playgroud)

请注意,这是由qt creator通过Add Library界面自动生成的.

这是我正在运行的代码永远不会有效.(意思是总是false)

namespace fs = boost::filesystem;
boost::system::error_code c;
fs::path path("/path/to/some/dir"); // Have tried '.' '/' './' '/usr' Everything!
bool isDir = boost::filesystem::is_directory(path, c);

if(!isDir) {
    std::cout << "Error Response: " << c << std::endl;
    ui->directoryEdit->setStyleSheet("background-color: red;");
}
else {
    std::cout << "Is a …
Run Code Online (Sandbox Code Playgroud)

c++ macos boost boost-filesystem

15
推荐指数
1
解决办法
4581
查看次数

Boost.Filesystem如何找出你的可执行文件在哪个目录下?

所以我运行我的应用程序.我需要知道它的可执行文件在哪里.如何使用Boost.Filesystem找到它的路径?

c++ boost boost-filesystem

14
推荐指数
4
解决办法
2万
查看次数

如何避免使用Boost Libraries删除remove_all上的目录?

我正在使用boost :: filesystem :: remove_all操作来删除目录的内容.

它正确删除了内容,但是,作为Boost Filesystem Documentation的状态,它也会删除目录本身.

有没有一个简单的方法来保持目录,尽管它是空的?

c++ boost boost-filesystem

14
推荐指数
1
解决办法
1万
查看次数

C++ Boost Filesystem:如何修改路径中的词干?

我正在使用Boost Filesystem库.我有一条路

boost::filesystem::path P("/foo/bar.baz");
Run Code Online (Sandbox Code Playgroud)

我想将路径p的词干部分修改为"bar_quz",因此路径P保持不变

/foo/bar_quz.baz

有人能帮我吗?谢谢

c++ boost boost-filesystem

13
推荐指数
1
解决办法
7230
查看次数

为什么boost :: filesystem :: canonical()要求目标路径存在?

boost::filesystem::canonical(const path& p)各州的文件:

概述:将必须存在的p转换为没有符号链接,点或点点元素的绝对路径.
...
备注:!exists(p)是一个错误.

其结果是,如果p标识其目标不存在的符号链接,则该函数将失败file not found并且不返回路径.

这对我来说似乎过于严格:仅仅因为链接的目标不存在,我认为没有理由为什么该函数无法解析该不存在的目标的路径.(相比之下,absolute()没有这样的限制.)

(显然,如果一个符号链接的路径被打破,目标路径不能被解决.)

那么,这种限制是否有正当理由?

即使存在,是否也没有理由创建没有此限制的函数变体?(如果没有这样的变体,获取路径需要容易出错的手动复制canonical()已经完成的99%.)

我理解在这种情况之间存在的语义细微之处stat()并且lstat()同样适用于这种情况 - 这正是我认为函数变体同样合理的原因.

注意:这个问题同样适用于基于的std::experimental::filesystem库(n4100)boost::filesystem.

编辑:

在@Jonathan Wakeley下面非常知识渊博的答案之后,我仍然留下了原始问题的精髓,我将稍微重新思考:

  • 是否有一个基本的技术或逻辑上的理由,为什么boost::filesystem::canonical()要求目标存在?我的意思是,目标的不存在是否会使得无法解决规范形式的道路?

  • 如果没有,是否有任何技术或逻辑上的理由提出,只有从现有的形式,不同之处在于它的功能的变化要求目标存在?

  • boost::filesystem提议的N4100 的转换中(据我理解的情况)std::experimental::filesystem,是否canonical()经过适当的考虑后采用了这种限制,还是仅仅从Boost定义中"落后"?

编辑2:

我注意到Boost 1.60现在提供了这样的功能weakly_canonical():"返回p,symlinks已解析,结果归一化.返回:一个路径,由在canonical()p的前导元素组成的路径上调用函数的结果组成,如果有,则按照由p的元素,如果有的话,不存在."

编辑3:

这更多的讨论有关std::filesystem.

c++ boost boost-filesystem c++17

13
推荐指数
2
解决办法
7418
查看次数

为什么boost :: filesystem :: path和std :: filesystem :: path缺少operator +?

考虑以下关于路径分解的断言,其中每个局部变量例如stem具有明显的初始化,例如auto stem = path.stem()-

assert(root_path == root_name / root_directory);
assert(path == root_name / root_directory / relative_path);
assert(path == root_path / relative_path);

assert(path == parent_path / filename);
assert(filename == stem + extension);
Run Code Online (Sandbox Code Playgroud)

这一切都有效,除了最后一行 - 因为fs::path没有定义operator+.它有operator+=,但没有operator+.

这是什么故事?


我已经确定我可以通过添加自己的代码来编译代码operator+.有什么理由不这样做吗?(请注意,这是在我自己的命名空间中;我没有重新打开namespace std.)

fs::path operator+(fs::path a, const fs::path& b)
{
    a += b;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

我对这个问题的唯一假设是:

  • 也许设计师担心operator+会太容易混淆使用std::stringoperator+.但这看起来很愚蠢,因为它在语义上完全相同(所以为什么要关心它是否会混淆?).而这也似乎设计师不关心新手的困惑,当他们设计path.append("x")做一些语义不同str.append("x")和 …

c++ boost-filesystem c++17

13
推荐指数
1
解决办法
670
查看次数

如何将boost :: filesystem :: directory_iterator转换为const char*

我想遍历目录中的所有文件并打印其内容.Boost非常好地处理迭代部分,但我不知道如何将其转换为const char *.

boost::filesystem::directory_iterator path_it(path);
    boost::filesystem::directory_iterator end_it;
    while(path_it != end_it){
      std::cout << *path_it << std::endl;

      // Convert this to a c_string
      std::ifstream infile(*path_it);
    }
Run Code Online (Sandbox Code Playgroud)

我试着阅读这个文档,但找不到像string或的东西c_str().我是两个人的新手C++,boost并希望找到一些javadoc类似的文档,基本上可以告诉我成员是什么以及可用的功能而不是转储源代码.

对不起咆哮,但有人可以告诉我如何转换*path_itc string.

c++ boost boost-filesystem

12
推荐指数
1
解决办法
1万
查看次数

如何确定文件是否包含在Boost Filesystem Library v3的路径中?

如何确定文件是否包含在boost文件系统v3的路径中.

我看到有一个更小或更大的运算符,但这似乎只是词汇.我看到的最好的方法如下:

  • 获取文件和路径的两个绝对路径
  • 删除文件的最后一部分,看它是否等于路径(如果它包含它)

有没有更好的方法来做到这一点?

c++ boost boost-filesystem

11
推荐指数
2
解决办法
4438
查看次数

标签 统计

boost-filesystem ×10

c++ ×10

boost ×8

c++17 ×2

file-io ×1

macos ×1