2013-11-03 7 views
4

우리의 컴퓨터 과학 선생님은 우리에게 C++를 사용하여 완벽하게 작동하는 콘솔 응용 프로그램을 만드는 프로젝트를 제공했습니다. 그리고 나는 그것을 만들기 시작했습니다. 그러나 나는 어느 시점에 갇혀있다. open() 함수를 사용하여 편집 가능한 텍스트 (.txt) 파일을 열고 싶습니다. 그러나 모든 텍스트 파일에 대해 별도의 폴더를 만들었습니다. 필자는 필자의 경우 "F : \ My Work \ C++ \ My School Project \ Text Files"라는 open() 함수에 전체 디렉토리 이름을 제공해야한다는 것을 알고 있습니다. 하지만 pendrive에서 '내 학교 프로젝트'폴더를 복사하여 내 친구 집에 가져 가서 컴퓨터에서 프로그램을 실행하려고하면 어떻게됩니까? 윌 작동합니까 ??? 내 말은 'F'디렉토리에 '내 작업'폴더가 있거나 F 디스크가 없을 수도 있다는 뜻입니다. 따라서이 경우 주소가 변경됩니다. 그래서 내가 다른 컴퓨터에서 프로그램을 실행하려고 할 때마다 open() 함수에서 주소를 변경하지 않고 각 컴퓨터에서 프로그램이 작동하도록 open() 함수를 입력해야하는 주소 ... 소스 코드 설명과 함께 도움이 될 수 있습니다 ... 감사합니다 !!!어떻게 파일을 열 수 있습니까?

+4

마침내 질문은 학교 프로젝트를위한 것이며, 솔루션을 찾기 위해 이미 시도한 것입니다. +1. – smoore4

+2

C 또는 C++에는 "open()'"함수가 없습니다. 기껏해야 플랫폼에 종속적 인 저수준 함수이며, 표준 라이브러리 파일 처리 함수 (예 :'fopen()')를 사용해야합니다. –

답변

3

절대 경로를 사용하는 대신 상대 경로를 사용해야합니다. 폴더에서 프로그램을 실행하면 이것이 작업 경로입니다. 그런 다음 파일 이름이나 폴더 및 파일 이름 만 열기 기능에 전달하여이 폴더 또는이 폴더의 하위 폴더 내에있는 파일을 열 수 있습니다. 따라서 C:\...을 여는 대신 someFolder\someFile.txt을 열면됩니다.

2

당신이 좋아 당신이 명령 줄 인수의 일부로서 구문 분석 파일 이름 갖는 고려할 수 : 더 나은 그래서 제대로 매핑 된 드라이브 :

int main(int arg, char* args[]) { 

    FILE *newfile = fopen(args[1], "r"); 

} 

당신은 모든 컴퓨터가 F가 가진 확신 할 수 없다을 UNC (Universal Naming Convention) 이름 즉 "\ server \ share \ path \ file"을 사용하십시오.

부스트 파일 시스템을 사용하는 것도 좋은 방법이지만 외부 라이브러리에 의존하기 때문에 코드가 더 복잡해집니다 (학생들이 혼란 스러울 수도 있음). Boost Filesystem에 대한 문서는 여기에서 찾을 수 있습니다. http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm

관련 문제