저는 C++로 작성하기 위해 파일을 열기 위해 ofstream의 open (...)을 사용하려고합니다. 어떤 이유 때문에, stringstream에서 생성 된 char * 또는 string을 사용하면 실패합니다. 즉 ofstream 객체의 fail() 함수는 true를 반환합니다 (확인 및 콘솔 메시지로 확인 됨). 아래를 참조하십시오 :ofstream open (...) stringstream에서 생성 된 char 포인터를 전달할 때 실패했습니다.
이렇게하면 콘솔에 '실패'가 인쇄됩니다. 디버거를 사용하여 logPath가 실제로 올바른 예상 문자열을 가리키는 지 확인했습니다.
이C:\Logs\2015:01:15:18:34:10.txt
그러나 개방 (...) 여전히 상태를 실패 화나게 : 나는 < < 단지 stream.open있는 행하기 전에 cout을 할 경우 예, 그것은 예를 들어,뿐만 아니라 콘솔에 올바른 경로를 인쇄 파일에 쓸 수 없습니다. 그러나 logPath에 대신 문자열 리터럴을 채우는 경우
char * logPath = "c:\\logs\\log.txt";
그러면 작동합니다. 더구나, 분명히 내가 열린 경로 (...)에 직접 경로를 사용하여 문자열 리터럴을 넣으면 작동합니다.
stream.open(ss.str().c_str(), ios::out | ios::app);
이유 : 타임 스탬프 생성기를 사용하는 경우
이 또한 실패? ofstream open (...) 호출이 읽을 수있는 stringstream에서 C 문자열/char *을 어떻게 얻을 수 있습니까? 이는 또한 실패 상태가됩니다.
stream.open(ss.str(), ios::out | ios::app);
또한 append 명령을 사용하여 문자열을 작성하면 실패합니다. 예컨대 :
string path;
path.append(DIRECTORY_PATH);
path.append(generateTimestamp());
path.append(".txt");
stream.open(path, ios::out | ios::app);
내가 디버깅 또는 인쇄 (예를 들어 cout을 < < 경로) 콘솔에 경우는, 실패, 그러나 다시 나는이 예상되는 경로를 얻을 :
C:\Logs\2015:01:15:18:34:10.txt
내가 무엇을 놓치고를?
디버거에서 복사 한 후 logPath의 내용을 확인하십시오. 나는 끝이 아닌 문제를 의심합니다. – user3159253
'string'을 사용하기 전에'stringstream'을 닫지 않겠습니까? –
@ user3159253 - 예, 내용을 확인했습니다. 그들은 나에게 맞는 것처럼 보입니다. 경우에 따라 수동으로 null 종료 '\ 0'을 경로 문자열의 끝에 추가하려고 시도했지만 그 중 하나도 작동하지 않았습니다. – Steverino