2012-05-18 3 views
0

나는 C++ 프로그램을 쓰고 있어요에서 파일 및 폴더 관리를 사용하여, 여기에 작업입니다 : 내가 가진리눅스 시스템 호출 및 C++

string proj_Name 및 다른 문자열 주소, 나는 내 프로그램 옆에 루트라는 이름의 폴더가 . 이제 루트 폴더에 proj_name이라는 폴더를 만들고 주소의 모든 것을이 새 폴더로 복사해야합니다.

디렉토리를 만들거나 파일을 복사 할 때 리눅스 터미널을 사용할 때 mkdir proj_name 또는 cp [src] [dst]을 입력하십시오. 프로그램에서 터미널 명령을 사용하려면 시스템 호출을 사용해야하지만 시스템 호출이 무엇인지 또는 어떻게 사용할 수 있는지에 대해서는 알지 못한다고 들었습니다.

그 외에도 루트에 프로젝트 폴더를 더 만들 수 있으며 프로그램에서 각 프로젝트 폴더에 액세스 할 수 있어야합니다.

OOP 디자인을 사용하여 파일과 폴더를 처리하는 방법 (예 : 사용자로부터 proj_name이 나오고 해당 폴더를 루트에서 찾은 다음 해당 프로젝트에 일부 작업을 수행해야합니까?)

당연히 나는 _project_ class을 가져야하지만, 필요한 멤버 변수를 모르겠습니다. 게다가 나는 다음과 같이 반복적 인 방식으로 폴더를 복사 할 수 있다고 들었습니다 : 폴더 복사 -> 열기 -> 각 파일 -> 각 폴더에 대해 파일 복사 -> 처음부터이 알고리즘을 수행하십시오.

아무도 도와 줄 수 있습니까? 사전에

감사합니다.

+1

'man mkdir'는 쉘 명령에 대한 문서를 보여줍니다. 'man 2 mkdir'은 시스템 호출에 대한 문서를 제공합니다. –

+0

또한 시스템 호출은'mkfolder'가 아니라'mkdir'입니다. 그것을 "폴더"라고 부르지 마십시오! –

답변

1

나는 이것이 숙제임을 나타내지 만, 숙제라고 가정합니다. 세 가지 솔루션은 마음에 봄 :

  1. 명령 줄 문자열을 작성하고이를 실행하기 위해 system() 전화를 사용합니다. 솔직히이 명령은 여러 가지 이유 때문에 상당히 끔찍합니다. (i) 명령이 작동하는지 여부를 확인하기 어렵습니다. (ii) 악성 코드 (hack)를 삽입하기 쉽고 (iii) 플랫폼에 따라 다릅니다.

  2. 당신은 언급 한 것처럼 시스템 호출을 사용하여 파일 복사, 디렉토리 생성 등을 할 수 있습니다. UNIX에서 작업하는 경우 take a look at this question을 사용하면 도움이 될 수 있습니다. 여기서 또 다시 단점은 매우 구체적인 플랫폼이라는 것입니다.

  3. 마지막으로 Boost filesystem과 같은 제네릭 라이브러리를 사용하는 것이 가장 좋으며 (OO에서 파일 시스템을 모델링 할 수 있다는 것을 증명해야하는 경우) API를 살펴보면 다양한 객체가 객체 지향 설계에 어떻게 들어 맞을 수 있는지에 대한 단서를 얻을 수 있습니다.

+0

'system (3)'라이브러리 함수를 사용하는 것은 좋은 생각이 아니지만 특정 플랫폼에 맞는지 확실하지 않습니다. 주의와 경고 (예 :'$ PATH' *를'/ bin :/usr/bin'으로 시작하고'/ bin/mkdir'만이 아닌'/ bin/mkdir' 같은 전체 경로를 사용하면)에 Posix에서 지정한 명령을 사용할 수 있습니다. 상당히 휴대하기 쉬운 방법. –

관련 문제