출력 파일이 모든 프로젝트 파일이 아닌 특정 폴더로 이동하도록 프로젝트의 작업 디렉토리를 변경해야합니다. 내가 무엇을 얻을 그러나C++을 사용하는 디렉토리로 이동할 수 없습니다.
system("cd secretdir/");
system("ls");
을, 사용하고
는 현재 프로젝트 디렉토리에있는 파일의 목록이 아니라 "secretdir"입니다. 나는 맥 OS X 10.6에있어
/Qt는 창조주 4.7 64 비트
감사합니다!
출력 파일이 모든 프로젝트 파일이 아닌 특정 폴더로 이동하도록 프로젝트의 작업 디렉토리를 변경해야합니다. 내가 무엇을 얻을 그러나C++을 사용하는 디렉토리로 이동할 수 없습니다.
system("cd secretdir/");
system("ls");
을, 사용하고
는 현재 프로젝트 디렉토리에있는 파일의 목록이 아니라 "secretdir"입니다. 나는 맥 OS X 10.6에있어
/Qt는 창조주 4.7 64 비트
감사합니다!
현재 코드, ./secretdir
에 현재 디렉토리를 변경 한 후 다른 아무것도하지 않고 exit()
로 진행하는 서브 쉘를 생성합니다.
그런 후에 만 에서 ls
실행 물론 그의 현재 디렉토리 또 다른 서브 쉘, 당신이 system()
에 대한 이전 호출하는 동안 무엇을했는지 완전히 독립적.
아마도 문제가있는 곳일 것입니다. chdir() 기능을 찾으십니까? 그것은 POSIX의 API이기 때문에 실제로뿐만 아니라 다른 여러 플랫폼에서 동일하게 작동하지만
chdir("secretdir");
// From now on, the current directory of the process is `./secretdir`.
system("ls"); // Will probably behave as expected.
이것은 "출력 파일이 특정 폴더로 이동하도록"요구 사항에 대해 * 아무것도 * 수행하지 않습니다. –
@Ben, 네 말이 맞아, 나는 그 질문을 잘못 읽었다. 답변이 업데이트되었습니다. 헤드 업에 감사드립니다. –
고마워요! 정확히 내가 무엇을 찾고 있었는지. – Alex
당신은 당신이 전체 경로 이름을 사용하여 출력 파일을 저장하는 대신에 작업 디렉토리를 변경하는 것을 고려한다
또한 현재 작업 디렉토리를 변경해야합니다.
편집 Falmarri의 답변을 참조하여 질문의 첫 번째 문장을 글로 나타내십시오. 또한 chdir
다음을 사용할 수 있습니다
는
첫 번째 system
가 cd
않는 새로운 프로세스를 생성 crufty입니다. 두 번째 system
은 이전에 어떤 일이 발생했는지 전혀 모르는 완전히 다른 프로세스를 생성합니다. 당신이 할 수
한 가지입니다
system("ls secretdir/");
출력 파일이 특정 폴더로 이동하도록 요구 사항에 대해 * 아무것도 * 수행하지 않습니다. –
+1 셸 명령의 전체 인터페이스를 사용하지 말고 AFAICT를 사용하는 대신, OP는 테스트 목적으로 'ls'만을 수행하며 실제 목표는 프로그램의 작업 디렉토리를 변경하는 것입니다. –
맥 OSX의 기능은 chdir("./secretdir")
입니다.
QT Creator 도움말이나 온라인 설명서에 사용중인 QDir
, QFile
및 QProcess
개체를 사용하고 있으므로 체크 아웃하시기 바랍니다.그들은 매우 상세하고 이해하기 쉬운 문서를 가지고 있으며 QT에서 사용할 수있는 도구를 사용하는 것이 제한된 경험에서 이식 도구와 유용성을 크게 향상시키는 도구를 선택해야하는 주된 이유입니다.
특히 QT Creator가 기본 개발 환경 인 경우 북마크 할 가치가있는 0123-에 QT 관련 질문을위한 훌륭한 커뮤니티가 있습니다.
system
을 사용하면 많은 경우에 비효율적이며 안전하지 못합니다.
편집 : 죄송합니다. 첫 번째 문장을 지나치게 글로 나타내어 코드 비트로 넘어갔습니다. QT Creator의 프로젝트 탭에서 프로젝트 설정을 수정하여 작업 디렉토리를 지정할 수있는 빌드에 사용자 정의 프로세스 단계를 추가 한 다음 출력을 가져 오려는 위치로 복사 명령을 수행 할 수 있습니다. 또한 .pro 파일 내에서 직접 빌드 출력 옵션을 지정할 수도 있습니다 ... 다시 한번 도움말과 문서는 친구입니다. 시스템을 사용
()는 이식 할 수 없습니다 그래서 그런 식으로 직접적으로 "CD"를 사용하지 않도록하려고합니다. 내 충고는 Boost filesystem입니다.
참고로 '시스템'을 사용하는 것이 최후의 수단이어야합니다. 새로운 쉘을 호출 할 때마다 새로운 쉘을 생성하는 것 외에도, 의도하지 않은 것들을 실행하는 것에 속아 넘어지기 쉽습니다. 다른 프로그램을 생성해야한다면'exec' 계열의 명령을 시도해보십시오. – cHao
QT Creator를 언급하면 가장 쉬운 방법은 QDir :: setCurrent ("secretdir"); – AJG85
그는 QtCreator를 IDE로 사용하고 실제로 Qt 라이브러리를 사용하지 않을 수도 있습니다. – Falmarri