我想使用 Boost 的文件系统功能。我试试
cout << boost::filesystem::file_size(fname.c_str()) << endl;
哪里 fname="file.txt";
我得到了错误
boost::filesystem::file_size: No such file or directory
我确信我有正确的路径,因为 system("cat file.txt")
有效。我检查了该文件夹不是NFS;它是 NTFS。
我在 Windows 7 机器上的 cygwin 上使用 g++。
编辑:我也试过
cout << boost::filesystem::file_size(fname);
并使用 fname="./file.txt"
在 makefile 中,我使用 -lboost_system -lboost_filesystem
进行链接,还使用 -I/usr/local/opt/boost/include -L/usr/local/opt/boost/库
更新:我改变了它,所以在文件的开头有一个 using namespace boost::filesystem;
并删除了前面的 boost::filesystem::"
file_size()
。现在我在使用 fname="file.txt"
时遇到了同样的错误,但是如果我使用 fname="./file.txt"
我收到一个新错误:
boost::filesystem::file_size: Operation not permitted
我尝试过不同类型的文件(.txt、.dat、.cpp)
它附带的教程程序 tut1.cpp
使用相同的语法,所以我认为这可能是一个编译问题。我试图找到编译 tut1.cpp 的文件(大概是一个 makefile),但没有成功。
tut1.cpp 看起来像这样:
// filesystem tut1.cpp ---------------------------------------------------------------//
// Copyright Beman Dawes 2009
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
// Library home page: http://www.boost.org/libs/filesystem
#include <iostream>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
int main(int argc, char* argv[])
{
if (argc < 2)
{
std::cout << "Usage: tut1 path\n";
return 1;
}
std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
return 0;
}
最佳答案
fname
是路径吗?因为,然后,只需删除 .c_str()
成员调用。
可能是访问器函数添加了一些特定于操作系统的引用或转义。 ( example on linux )
您可以分配给 std::string,这样您就可以在调试器中观察该值。
关于c++ - boost 找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27029810/