2014-11-20 3 views
0

Я хочу использовать функции файловой системы 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; 
} 

ответ

1

ли fname путь? Потому что, просто отбросьте вызов .c_str().

Возможно, функции accessor добавили определенную котировку или экранирование конкретной операционной системы. (example on linux)

Вы можете назначить строку std ::, чтобы вы могли наблюдать за значением в отладчике.

+0

На самом деле я подумал об этом; ошибка сохраняется без 'c_str()'. Возможно, вы правы, и я должен использовать отладчик – jorgen

 Смежные вопросы

  • Нет связанных вопросов^_^