2013-02-04 3 views
0

데이터 파일에 대한 질문이있어서 물건을 처리하는 함수를 작성해야합니다. 다른 모든 질문에서는 "abc.txt"와 같은 고정 파일 이름을 처리하므로 함수가 일반화되지 않습니다. 를 사용하는 방법이 있나요std :: fstream에서 문자열을 파일 이름으로 사용.

char str[20]="Newfile.txt"; 
fstream file(str,ios::in|ios::out); 

:

fstream file("abc.txt",ios::in|ios::out);

과로 돌려 : 나는 데이터 파일이 문에서 문자열 변수를 사용하여 만들 수있는 방법이 있다면 알고 싶은 문자열을 파일 이름으로 std::fstream? 문자열을 사용해 보았지만 프로그램 컴파일시 오류가 표시되지 않지만 그러한 파일은 생성되지 않았습니다.

+1

당신이 [표준 : : fstream 참조]에서 보는 일이 있었나요 (http://en.cppreference.com/w/cpp/io/basic_fstream/basic_fstream)? – ChiefTwoPencils

+1

1) * string *이라는 용어는 모호합니다. * 문자 배열 * 또는 * std :: string *, 2) 입출력을 위해 동일한 fstream을 사용하는 것이 거의 불가능합니다. 3) 이 기본 질문에 대한 좋은 참고서 - 귀하의 코스 텍스트가 그들을 커버하지 않는 경우. – Beta

답변

6

컴파일러에 따라 다릅니다. 이 방법은 지속적으로 작동합니다

void do_something(std::string const &filename) { 

    std::fstream(filename.c_str()); 
    // ... 
} 

이 방법은 새로운 (C++ 11) 컴파일러,하지만 오래된 것들에서 작동합니다

void do_something(std::string const &filename) { 

    std::fstream(filename); 
    // ... 
} 
+0

좋아 ..하지만 거기에 다른 방법이 있습니까? 이전 버전에서 작동 할 것입니다 ..? 변수를 사용하지 않고 대신 fn()을 일반화합니다. – user2038517

+0

@ user2038517 : 내가 보여준 첫 번째 파일은 열어야 할 파일의 이름을 지정할 수있게 해주는 함수이다. C++ 컴파일러가 작동하지 않는 한 (즉,'std :: string'이 발명 된 것보다) 조금도). –

+1

Jerry의 첫 번째 솔루션은 이전 버전에서 작동합니다. 변수없이 함수를 일반화 할 수는 없습니다 - 어떤 파일을 열 것인지를 어떻게 알 수 있습니까? – us2012

관련 문제