我尝试这样做时出错:
path p = "somepath";
FILE* file = fopen(p.c_str(), "r");
Run Code Online (Sandbox Code Playgroud)
我明白了:
"const boost :: filesystem :: path :: value_type*"类型的参数与"const char*"类型的参数不兼容
谁能告诉我我做错了什么?谢谢
如何确定文件是否包含在boost文件系统v3的路径中.
我看到有一个更小或更大的运算符,但这似乎只是词汇.我看到的最好的方法如下:
有没有更好的方法来做到这一点?
我正在尝试使用一个文件从一个位置移动到另一个位置boost::filesystem.我使用了boost::filesystem::rename函数但是当我尝试这样做时,我有以下错误.
terminate called after throwing an instance of
'boost::filesystem::filesystem_error'
what(): boost::filesystem::rename: Invalid cross-device link:
"./file_A.csv", "/opt/data/file_B.csv"
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
我明白问题是我试图将文件从一个文件夹移动到另一个文件夹上安装的另一个文件夹.
有什么不同的解决方案吗?
mv在一个呼叫std::systen?boost::filesystem对于我想要实现的目标,还有其他功能吗?我自己找不到.
我正在使用g ++和linux.
我想使用boost文件系统读取/写入具有unicode文件名的文件,在Windows上使用boost语言环境(mingw)(最后应该是平台独立的).
这是我的代码:
#include <boost/locale.hpp>
#define BOOST_NO_CXX11_SCOPED_ENUMS
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
namespace fs = boost::filesystem;
#include <string>
#include <iostream>
int main() {
std::locale::global(boost::locale::generator().generate(""));
fs::path::imbue(std::locale());
fs::path file("äöü.txt");
if (!fs::exists(file)) {
std::cout << "File does not exist" << std::endl;
}
fs::ofstream(file, std::ios_base::app) << "Test" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在fs::exists真正检查与名称的文件äöü.txt.但是书面文件有名字äöü.txt.
阅读给出了同样的问题.使用fs::wofstream也没有帮助,因为这只是处理广泛的输入.
如何使用C++ 11和boost来解决这个问题?
编辑:发布错误报告:https://svn.boost.org/trac/boost/ticket/9968
澄清赏金: Qt很简单,但我想要一个只使用C++ 11和Boost,没有Qt和没有ICU的跨平台解决方案.
例如,考虑一下
file_size.要获取我们将要使用的文件的大小
std::filesystem::path p = std::filesystem::current_path();
// ... usual "does this exist && is this a file" boilerplate
auto n = std::filesystem::file_size(p);
Run Code Online (Sandbox Code Playgroud)
这没有什么不对,如果它是普通的C,但已经被教导C++是一种OO语言[我知道这是多范式,向我们的语言律师道歉:-)]只是感觉如此...... 势在必行(对我来说不好意思,我已经开始期待对象了
auto n = p.file_size();
Run Code Online (Sandbox Code Playgroud)
代替.对于其他功能也是如此,例如resize_file,remove_file甚至可能更多.
你知道为什么Boost std::filesystem选择这种命令式而不是对象式的任何理由吗?有什么好处?提升提到了规则(在最底层),但没有理由.
我正在考虑固有问题,例如ps state after remove_file(p)或错误标志(带有附加参数的重载),但这两种方法都没有解决这些问题.
您可以使用迭代器观察类似的模式,现在我们可以(应该?)begin(it)而不是it.begin(),但在这里我认为理由是更符合非修改next(it)等等.
我正在使用Boost::FileSystem在Linux平台下运行的C++库,我有一个问题如下:
我想要一个比给定日期时间更早修改的文件列表.我不知道是否boost::FileSystem提供这样的方法:
vector<string> listFiles = boost::FileSystem::getFiles("\directory", "01/01/2010 12:00:00");
Run Code Online (Sandbox Code Playgroud)
如果是,请提供示例代码?
我是C++和Boost的新手.我正在做一个简单的小程序来尝试学习Boost Filesystem库.我按照指示构建了Boost库.现在当我尝试编译这个简单的代码时,我得到了6个这样的错误.
Error 5 error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600' in App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filesystem-vc110-mt-gd-1_51.lib(codecvt_error_category.obj) ConsoleApp2 Error 1 error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600' in App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filesystem-vc110-mt-gd-1_51.lib(operations.obj) ConsoleApp2 Error 2 error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600' in App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filesystem-vc110-mt-gd-1_51.lib(path.obj) ConsoleApp2 Error 3 error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600' in App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filesystem-vc110-mt-gd-1_51.lib(path_traits.obj) ConsoleApp2 Error 4 error LNK2038: mismatch detected …
我有以下代码:
#include <iostream>
#include <boost\filesystem.hpp>
int main(){
const char* file_path = "my_path";
std::cout << boost::filesystem::file_size(file_path) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当我构建时,我得到以下错误:
1>Main.obj : error LNK2019: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ) referenced in function "void __cdecl boost::system::`dynamic initializer for 'native_ecat''(void)" (??__Enative_ecat@system@boost@@YAXXZ)
1>Main.obj : error LNK2019: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ) referenced in function "void __cdecl boost::system::`dynamic initializer for 'errno_ecat''(void)" (??__Eerrno_ecat@system@boost@@YAXXZ)
1>Main.obj : error LNK2019: unresolved external symbol "void __cdecl boost::filesystem::path_traits::convert(char const *,char const …Run Code Online (Sandbox Code Playgroud) 是否有功能boost::filesystem扩展以用户主目录符号开头的路径(~在Unix上),类似于Python中提供的os.path.expanduser函数?
感谢C++ 11,在与boost的长期关系之后,让我依赖它的最后一个组件是文件系统.根据链接:文件系统库, std :: filesystem似乎是实验性的
由于它模仿boost :: filesystem,我可以轻松地将我的项目调整为std并摆脱巨大的boost依赖.哪些编译器支持它并且使用它是否重要,即使它是实验性的,因为它模仿提升(因为它没有时间表来标准化)?