标签: boost-filesystem

如何使用覆盖执行boost :: filesystem copy_file

Windows API函数CopyFile有一个参数BOOL bFailIfExists,允许您控制是否要覆盖目标文件(如果存在).

boost::filesystem copy_file函数没有这样的参数,如果目标文件存在则会失败.是否有一种优雅的方式来使用boost copy_file函数并覆盖目标文件?或者仅仅使用Windows API更好吗?我目前的目标平台是Windows,但我更喜欢使用STL并在可能的情况下增强以保持我的代码平台独立.

谢谢.

c++ windows boost boost-filesystem

44
推荐指数
3
解决办法
4万
查看次数

boost directory_iterator示例 - 如何列出不递归的目录文件

我应该如何使用directory_iterator列出目录文件(不是递归)?

我应该添加/链接什么头文件/库或我应该做的其他设置?我在我的项目中使用了boost,但directory_iterator出于某种原因是"声称不足的标识符",而我可以使用其他的boost功能.

更新

另一种方案:

#include <filesystem>
#include <boost/filesystem.hpp>
#include <iostream>

using namespace boost::filesystem;

for (directory_iterator itr(path_ss); itr!=directory_iterator(); ++itr)
{
    cout << itr->path().filename() << ' '; // display filename only
    if (is_regular_file(itr->status())) cout << " [" << file_size(itr->path()) << ']';
    cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)

boost boost-filesystem

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

从两个绝对路径获取相对路径

我有两个绝对文件系统路径(A和B),我想生成第三个文件系统路径,表示"B的相对".

使用案例:

  • 管理播放列表的媒体播放器.
  • 用户将文件添加到播放列表.
  • 相对于播放列表路径添加到播放列表的新文件路径.
  • 将来,整个音乐目录(包括播放列表)都移动到其他地方.
  • 所有路径仍然有效,因为它们与播放列表相关.

boost::filesystem似乎必须complete解决relative ~ relative => absolute,但在reverse(absolute ~ absolute => relative)中没有做任何事情.

我想用Boost路径来做.

c++ boost boost-filesystem

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

boost :: filesystem得到相对路径

boost::filesystem库的哪些方法可以帮助我获得相对于另一条路径的路径?

我有一条路/home/user1/Downloads/Books和一条路/home/user1/.现在我想要一条路Downloads/Books.

c++ filesystems boost boost-filesystem

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

Boost文件系统和标准C++文件系统库有多相似?

我需要一个文件系统库,用于支持C++ 11的编译器或支持C++ 14的编译器 - 所以它不能来自C++ 17.

现在,我知道进入C++ 17的文件系统库是基于Boost :: Filesystem的; 但是 - 它们是否足够相似,我可以使用Boost库,然后在以后无缝切换到标准版本,而不会更改,比如using声明?或两者之间是否存在(轻微/重大)差异?我知道,对于这种情况variant,Boost和标准库版本有很大不同.

c++ c++-standard-library boost-filesystem c++11 c++17

24
推荐指数
2
解决办法
3998
查看次数

什么是C++ 17相当于boost :: filesystem :: unique_path()?

std::filesystem在C++ 17上,std::experimental::filesystem对于许多前C++ 17编译器来说,基于boost::filesystem并且几乎所有它都很明显地移植到较新的std.

但我认为不std::filesystem相同boost::filesystem::unique_path().

我没有注意到std中的等价物吗?或者我是否应该采用一种推荐的方法来模仿实现?

boost::filesystem当我的代码注意到它在支持的平台上进行编译时,我真的希望能够替换依赖std::filesystem,并且unique_path()是我转换中唯一不明显的部分.

c++ boost boost-filesystem c++17 std-filesystem

23
推荐指数
2
解决办法
3050
查看次数

展开其路径中包含环境变量的文件名

什么是扩展的最佳方式

${MyPath}/filename.txt to /home/user/filename.txt
Run Code Online (Sandbox Code Playgroud)

要么

%MyPath%/filename.txt to c:\Documents and settings\user\filename.txt
Run Code Online (Sandbox Code Playgroud)

遍历遍历路径字符串直接寻找环境变量?我看到wxWidgets有一个wxExpandEnvVars函数.在这种情况下我不能使用wxWidgets,所以我希望找到一个boost :: filesystem等价或类似的.我只使用主目录作为示例,我正在寻找通用路径扩展.

c++ wxwidgets boost-filesystem

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

目录路径上的boost :: filesystem exists()失败,但is_directory()没问题

我正在使用boost文件系统获取当前目录的路径,然后检查目录是否存在.

is_directory()exists()没问题,但在相同的路径上失败了,我错过了什么吗?

示例代码(boost 1.35):

#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>

namespace fs = boost::filesystem;

// the path is full path /home/my/somedirectory    
fs::path data_dir(fs::current_path());

fs::is_directory(data_dir)  // true, directory exists

fs::exists(data_dir)   // false
exists(status(data_dir))  // false
Run Code Online (Sandbox Code Playgroud)

编辑:

#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
namespace fs = boost::filesystem;

fs::path data_dir(fs::current_path());
// data_dir == "/home/myusername/proj/test"

if (fs::is_directory(data_dir))             // true - is directory
if (fs::is_directory(fs::status(data_dir))) // true - it is still a directory
Run Code Online (Sandbox Code Playgroud)

有趣的部分:

if (fs::exists(fs::status(data_dir)))       // true - directory exists
if (fs::exists( data_dir ))                 // true …
Run Code Online (Sandbox Code Playgroud)

boost boost-filesystem

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

C++ BOOST对`boost :: filesystem :: detail :: copy_file的未定义引用

我不知道为什么boost::filesystem::copy_file要为我制造麻烦.

未定义的引用`boost :: filesystem :: detail :: copy_file

// g++ -std=c++11 test.cpp -lboost_filesystem -lboost_system -lrt -lboost_wave

#include <boost/filesystem.hpp>

int main()
{

    boost::filesystem::create_directory("aaa");
    // ok


    boost::filesystem::copy_file("f1","f2");
    // /tmp/ccNWZltB.o: In function `boost::filesystem::copy_file(boost::filesystem::path const&, boost::filesystem::path const&)':
    // test.cpp:(.text._ZN5boost10filesystem9copy_fileERKNS0_4pathES3_[_ZN5boost10filesystem9copy_fileERKNS0_4pathES3_]+0x26): undefined reference to `boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option, boost::system::error_code*)'
    // collect2: error: ld returned 1 exit status


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我从boost的源代码或它的帮助中得不到灵感:

  inline
  void copy_file(const path& from, const path& to,   // See ticket #2925
                 BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec)
                                       {detail::copy_file(from, to, option, &ec);} …
Run Code Online (Sandbox Code Playgroud)

c++ boost linker-errors boost-filesystem

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

使用BOOST_FOREACH迭代目录中的所有文件

你可以使用boost :: filesystem和BOOST_FOREACH迭代目录中的所有文件吗?我试过了

path dirPath = ...
int fileCount = 0;
BOOST_FOREACH(const path& filePath, dirPath)
    if(is_regular_file(filePath))
        ++fileCount;
Run Code Online (Sandbox Code Playgroud)

此代码编译,运行,但不会产生所需的结果.

c++ boost boost-filesystem boost-foreach

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