2012-10-09 1 views
0

이있는 폴더에 파일을 쓰기 Windows에서는 괜찮을 것입니다.) !! 위와 같은 동적 경로 (특정 경로가 아닌)로 어떻게 작성할 수 있습니까? 감사!나는 성공적으로 예제를 실행 폴더에 파일에 쓸 동적 경로 C++

+2

잘못하면 파일을 여는 데 실패 했습니까? '/ xml' 디렉토리는 존재하지 않을 수 있으며'ofstream' 생성자는 누락 된 디렉토리를 생성하지 않습니다. – hmjd

+0

"잘못되었습니다"..? 그리고 "동적 경로"란 무엇입니까? 어쩌면 당신은'x' 앞에'/'를 두지 않고 상대 경로라고 부를 것입니다. 아마도 여러분은 여러분이 생각하는 작업 디렉토리에 없을 것입니다. –

답변

1

"동적 경로"란 무엇을 의미하는지 확실하지 않습니다. 동적 경로는 이 동적으로 읽히는 경로입니다 (따라서 std::string).

반면에 절대 경로와 상대 경로 인 을 혼동하는 것 같습니다. 파일 이름이 '/' (Unix 하에서)으로 시작하거나 또는 '\\'으로 시작하고 가능하면 "d:" 아래에 Windows 아래에 있습니다. 파일 검색은 파일 시스템의 루트 (Windows의 경우 지정된 드라이브에 있음)에서 시작됩니다. 다른 모든 경우에는 상대적입니다. 파일 검색은 현재 작업 디렉토리 인 에서 시작합니다. 귀하의 예에서 "/home/kingfisher/Desktop/TestWrite File/xml/kingfiger.txt""/xml/kingfisher.txt"은 모두 절대 값입니다. 현재 작업 디렉토리 이 "/home/kingfisher/Desktop/TestWrite File"이면 "xml/kingfisher.txt"은 첫 번째 절대 경로로 지정된 파일을 찾아야합니다.

1
*path = "/xml/kingfisher.txt" 

const char*을 역 참조하고 내용을 수정하려고 시도 했으므로 올바르지 않습니다. 데이터가 const이므로 정의되지 않은 동작입니다.

그냥 시작하는 std::string가 될 경로를 선언 : 나중에 당신이 표준 문자열에 원하는 다른 값을 할당 할 수 있습니다 그리고

std::string path = "/home/kingfisher/Desktop/TestWrite File/xml/kingfisher.txt"; 

그것은 operator= 동적으로 당신을 위해 그것의 내부 변경됩니다입니다 :

path = "my/new/path"; 

당신은 이전과 ofstream 이것을 사용하고 당신이 const char * 필요한 함수에 전달해야하는 경우 단지 path.c_str()를 전달할 수 있습니다.

+0

_ "이것은 역 참조이기 때문에 올바르지 않습니다. 귀하의 char * 및 원래 문자열의 첫 문자를 설정합니다 "_ - 사실 그것은'char const *'이고"정의되지 않은 동작 "--ness 플래그를"true "로 설정하는 것을 제외하고는 아무 것도 설정하지 않습니다. –

+0

@paxdiablo 사실 'const char *'와'char const *'도 같은 생각이었습니다. 가변 데이터에 대한 상수 포인터 인'char * const'입니다. – Benj

+0

그들은 그렇습니다. –

3

즉 그것을 절대 경로 수 있기 때문에 동적으로 당신이, 당신은 최고의 / 없애 상대해야 할 의미 경우 :

path = "xml/kingfisher.txt"; 

그냥이 파일이 현재 작업 디렉토리 때문에 상대적입니다 점에 유의를 이 기능을 사용하려면 /home/kingfisher/Desktop/TestWrite File으로 설정해야합니다. 당신이 원하는 때마다

, 동적으로, 당신은 변하기 쉬워,을 의미하는 경우에 당신은 변경할 수 있습니다 다음 const는 단순히 데이터 포인터 뒤에 을 변경하도록 허용하지 않는 것을 의미

const char *path = "/tmp/dummy"; 
: 
path = "/home/.profile";   // Note path, NOT *path 

. 원하는대로 포인터 자체를 변경할 수 있습니다.

관련 문제