Я хочу использовать функции файловой системы 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"
В make- -lboost_system -Lboost_filesystem
я связываюсь с -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
программа 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;
}
Является ли путь fname
? Потому что тогда просто отпустите .c_str()
.
Может случиться так, что функции accessor добавят некоторую цитату или экранирование конкретной операционной системы. (пример на linux)
Вы можете назначить std :: string, чтобы вы могли наблюдать за значением в отладчике.
c_str()
. Может быть, вы правы, и я должен использовать отладчик