2010-12-30 5 views
1

출력 파일이 모든 프로젝트 파일이 아닌 특정 폴더로 이동하도록 프로젝트의 작업 디렉토리를 변경해야합니다. 내가 무엇을 얻을 그러나C++을 사용하는 디렉토리로 이동할 수 없습니다.

system("cd secretdir/"); 
system("ls"); 

을, 사용하고

는 현재 프로젝트 디렉토리에있는 파일의 목록이 아니라 "secretdir"입니다. 나는 맥 OS X 10.6에있어

/Qt는 창조주 4.7 64 비트

감사합니다!

+4

참고로 '시스템'을 사용하는 것이 최후의 수단이어야합니다. 새로운 쉘을 호출 할 때마다 새로운 쉘을 생성하는 것 외에도, 의도하지 않은 것들을 실행하는 것에 속아 넘어지기 쉽습니다. 다른 프로그램을 생성해야한다면'exec' 계열의 명령을 시도해보십시오. – cHao

+0

QT Creator를 언급하면 ​​가장 쉬운 방법은 QDir :: setCurrent ("secretdir"); – AJG85

+0

그는 QtCreator를 IDE로 사용하고 실제로 Qt 라이브러리를 사용하지 않을 수도 있습니다. – Falmarri

답변

5

현재 코드, ./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. 
+1

이것은 "출력 파일이 특정 폴더로 이동하도록"요구 사항에 대해 * 아무것도 * 수행하지 않습니다. –

+0

@Ben, 네 말이 맞아, 나는 그 질문을 잘못 읽었다. 답변이 업데이트되었습니다. 헤드 업에 감사드립니다. –

+0

고마워요! 정확히 내가 무엇을 찾고 있었는지. – Alex

8

당신은 당신이 전체 경로 이름을 사용하여 출력 파일을 저장하는 대신에 작업 디렉토리를 변경하는 것을 고려한다

http://www.linuxquestions.org/questions/programming-9/how-to-change-current-working-directory-in-c-550031/

또한 현재 작업 디렉토리를 변경해야합니다.

+1

확실히 올바른 방향의 포인터입니다. 그러나 Mac OS-X는 리눅스가 아닌 BSD를 기반으로합니다. 이 특별한 질문에 대해서는'chdir'가 POSIX이기 때문에 물론 중요하지 않습니다. –

+0

이것은 어떻게 "올바른 방향의 포인터"입니까? 그냥 리눅스 퀘스트 때문이야? 그것은 posix 라이브러리입니다. – Falmarri

+0

답변을 주셔서 감사합니다. 나도 두 가지 해결책을 선택할 수 없습니다. – Alex

0

system("cd secretdir/; ls"); 

을하거나 더 나은 아직 부스트의 filesystem 라이브러리를 사용합니다. 아마도 opendir 일 것입니다.

+0

부스트 :: 파일 시스템이 우수하기 때문에 +1! – AJG85

+0

이러한 명령을 취소 할 수 있습니다. 'ls' 이후에 cd'ing하는 것은 cd를 시도하는 것보다 덜 의미가 있습니다. – cHao

+0

@ AJG85 : 예! 컴파일 시간을 없애고 STL을 공원에서 걷는 것처럼 보이게 만드는 다소간의 오류를 만들어내는 것 외에도 삶을 훨씬 더 단순하게 만듭니다. – Novikov

2

편집 Falmarri의 답변을 참조하여 질문의 첫 번째 문장을 글로 나타내십시오. 또한 chdir

다음을 사용할 수 있습니다

첫 번째 systemcd 않는 새로운 프로세스를 생성 crufty입니다. 두 번째 system은 이전에 어떤 일이 발생했는지 전혀 모르는 완전히 다른 프로세스를 생성합니다. 당신이 할 수

한 가지입니다

system("ls secretdir/");

+0

출력 파일이 특정 폴더로 이동하도록 요구 사항에 대해 * 아무것도 * 수행하지 않습니다. –

+1

+1 셸 명령의 전체 인터페이스를 사용하지 말고 AFAICT를 사용하는 대신, OP는 테스트 목적으로 'ls'만을 수행하며 실제 목표는 프로그램의 작업 디렉토리를 변경하는 것입니다. –

2

QT Creator 도움말이나 온라인 설명서에 사용중인 QDir, QFileQProcess 개체를 사용하고 있으므로 체크 아웃하시기 바랍니다.그들은 매우 상세하고 이해하기 쉬운 문서를 가지고 있으며 QT에서 사용할 수있는 도구를 사용하는 것이 제한된 경험에서 이식 도구와 유용성을 크게 향상시키는 도구를 선택해야하는 주된 이유입니다.

특히 QT Creator가 기본 개발 환경 인 경우 북마크 할 가치가있는 0123-에 QT 관련 질문을위한 훌륭한 커뮤니티가 있습니다.

system을 사용하면 많은 경우에 비효율적이며 안전하지 못합니다.

편집 : 죄송합니다. 첫 번째 문장을 지나치게 글로 나타내어 코드 비트로 넘어갔습니다. QT Creator의 프로젝트 탭에서 프로젝트 설정을 수정하여 작업 디렉토리를 지정할 수있는 빌드에 사용자 정의 프로세스 단계를 추가 한 다음 출력을 가져 오려는 위치로 복사 명령을 수행 할 수 있습니다. 또한 .pro 파일 내에서 직접 빌드 출력 옵션을 지정할 수도 있습니다 ... 다시 한번 도움말과 문서는 친구입니다. 시스템을 사용

alt text

1

()는 이식 할 수 없습니다 그래서 그런 식으로 직접적으로 "CD"를 사용하지 않도록하려고합니다. 내 충고는 Boost filesystem입니다.

Two-minutes Tutorial!

관련 문제