Повысить не найдя файл

0

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

1 ответ

1

Является ли путь fname? Потому что тогда просто отпустите .c_str().

Может случиться так, что функции accessor добавят некоторую цитату или экранирование конкретной операционной системы. (пример на linux)

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню