2012-05-27 3 views
35

fstream 개체에서 파일 이름이나 경로를 가져올 수 있습니까? 나는 fstream의 방법을 들여다 보았고 그것에 가까운 것을 찾지 못했습니다.fstream에서 파일 이름 (또는 경로) 가져 오기

+8

나는 그것이 가능하지 않다고 생각합니다. 기본 파일은 여러 개의 이름 (하드 링크가 여러 개있는 경우) 또는 이름이 전혀 없을 수도 있습니다 (예 : 익명 파이프를 나타내는 경우). –

답변

33

아니요, 적어도 표준 준수 라이브러리 구현에서는 가능하지 않습니다.

fstream 클래스는 파일 이름을 저장하지 않으며이를 검색하는 기능을 제공하지 않습니다. 단순히뿐만 아니라 파일 이름 주위에 통과,

std::map<std::fstream*, std::string> stream_file_table; 

void f() 
{ 
    //when you open a file, do this: 
    std::fstream file("somefile.txt"); 

    stream_file_table[&file] = "somefile.txt"; //store the filename 

    //.. 
    g(file); 
} 
void g(std::fstream & file) 
{ 
    std::string filename = stream_file_table[&file]; //get the filename 
    //... 
} 

또는 :

그래서이 정보를 추적하는 한 가지 방법으로 std::map를 사용하는 것입니다.

+0

이것은 괜찮아 보이는데, fstream 객체가 파괴되면 이름을 제거해야한다고 말할 필요가 있습니다. –

20

fstream에서 상속 받고 fstream처럼 동작하지만 파일 이름도 저장하는 작은 클래스를 디자인 할 수 있습니다.

+7

이것은 또한 다음과 같이 필요한 'std :: string'을 사용하여 편리한 생성자를 추가 할 수있게합니다. C++ 11이지만 C++ 03 구현에는 일반적으로 제공되지 않습니다. –

관련 문제