2014-11-20 6 views
0

부스트의 파일 시스템 기능을 사용하고 싶습니다. 나는 부스트 파일을 찾을 수 없습니다.

fname="file.txt";

cout << boost::filesystem::file_size(fname.c_str()) << endl; 

을 시도하고 난 내가 system("cat file.txt") 작동하기 때문에 올바른 경로가 확신 오류

boost::filesystem::file_size: No such file or directory 

를 얻을. 폴더가 NFS가 아닌지 확인했습니다. 그것은 NTFS입니다.

Windows 7 컴퓨터에서 cygwin에서 g ++을 사용하고 있습니다.

편집 : 나는 또한 또한 -I /usr/local/opt/boost/include -L /usr/local/opt/boost/lib

UPDATE를 사용하여

cout << boost::filesystem::file_size(fname); 

내가 -lboost_system -lboost_filesystem과를 사용하여 연결하고 있습니다 메이크에서 fname="./file.txt"

를 사용하여 시도 : 나는 그래서 using namespace boost::filesystem;가 변경 파일의 시작 부분에서 앞에있는 boost::filesystem::"을 삭제했습니다. 지금은 fname="file.txt"를 사용하여 동일한 오류를 가지고 있지만 내가 fname="./file.txt"를 사용하는 경우 나는 새로운 오류 얻을 : (.txt 인, .DAT, 통화 당)

튜토리얼 프로그램을 내가 파일의 다른 종류를 시도

boost::filesystem::file_size: Operation not permitted 

tut1.cpp와 함께 제공되며 동일한 구문을 사용하므로 컴파일 문제 일 수 있다고 생각합니다. 나는 행운을 빌어 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() 회원 호출을 삭제하십시오.

접근 자 기능이 일부 운영 체제 별 인용 또는 이스케이프를 추가 할 수 있습니다. (example on linux)

디버거에서 값을 볼 수 있도록 std :: string에 할당 할 수 있습니다.

+0

사실 나는 그 후에 생각했습니다. 오류는'c_str()'없이 지속됩니다. 어쩌면 당신 말이 맞아요. 그리고 디버거를 사용해야합니다. – jorgen

관련 문제