Я хочу использовать функции файловой системы Boost. Я стараюсь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.
Я использую g ++ на cygwin на компьютере под управлением Windows 7.
EDIT: Я также попытался
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/lib
UPDATE: Я изменил это так есть 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
, который поставляется с ним и использует те же синтаксические работы, поэтому я думаю, что это может быть проблемой компиляции. Я попытался найти файл (предположительно makefile), который компилирует tut1.cpp без везения.
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;
}
На самом деле я подумал об этом; ошибка сохраняется без 'c_str()'. Возможно, вы правы, и я должен использовать отладчик – jorgen