2010-05-27 2 views
0

C는 프로그래밍에 익숙한 언어가 아니기 때문에 이것을 수행하는 방법을 모르겠습니다.같은 폴더에없는 텍스트 파일을 여는 방법은 무엇입니까?

나는 모든 .c 및 .h 파일과 config.txt 파일을 읽을 수있는 conf 폴더가있는 프로젝트 폴더가 있습니다. 어떻게 열 수 있습니까?

FILE* fp = fopen("/conf/config.txt", "r"); 

if (fp != NULL) 
{ 
    //do stuff 
} 

else 
    printf("couldn't open file\n"); 

계속 오류 메시지가 나타납니다. 왜?

Btw,이 작업은 Windows가 아닌 Linux에서만 작동합니다.

감사합니다.

답변

6

쉬운 방법은

my_file = fopen("/path/to/my/file.txt", "r"); 

... 절대 경로를 사용하는 것입니다 또는 당신은 상대 경로를 사용할 수 있습니다. 실행 파일이 /home/me/bin에 당신의 txt 파일이 /home/me/doc에있는 경우, 다음 상대 경로는 현재 작업 디렉토리에 상대적인 것을

my_file = fopen("../doc/my_file.txt", "r"); 

상대 경로에 기억해야 할 중요한 것은 같은 수 있습니다 실행 파일이 실행됩니다. 따라서 위의 상대 경로를 사용했지만 /tmp 디렉토리에 있었고 /home/me/bin/myprog을 실행 한 경우 /tmp/../doc/my_file.txt (또는 /doc/my_file.txt)을 열려고 시도했지만 이는 실제로 존재하지 않습니다.

더 강력한 옵션은 프로그램의 인수로 파일 경로를 가져 와서 첫 번째 인수로 fopen에 전달하는 것입니다. 가장 간단한 예는 main에서 argv[1]를 사용하는 것 '물론

int main(int argc, char **argv) 
{ 
    FILE *my_file = fopen(argv[1], "r"); 
    /* ... */ 
    return 0; 
} 

, 당신은 확인 검사 오류를 넣어하는 것이 좋습니다 즉,의 매개 변수가 등 argc> 2,

+0

상대 경로를 사용해야합니다. conf 폴더에 파일이 있고 FILE * fp = fopen ("/ conf/config.txt", "r")을 시도했지만 작동하지 않았습니다. – nunos

+2

@nunos : 그것은 상대 경로가 아닙니다. 상대 경로는 현재 작업 디렉토리를 나타내는'.' 또는 현재 작업 디렉토리 위 *의 디렉토리를 나타내는'..'로 시작됩니다. 말하자면'/ tmp/foo'에 있다면'.'은'/ tmp/foo'를 가리키고 .. ..'는'/ tmp'를 가리 킵니다. './bar.txt'는'/ tmp/foo/bar.txt'를 나타낼 것입니다. –

+0

나는 창문에서 일하고있다. 창문에도 똑같은가요? – nunos

0

당신에게' 디렉토리 트래버 설을 위해 dirent 루틴 군을 조사하고 싶을 것이다.

0

.c.h 파일의 위치는 실제로 문제가 아닙니다. 실행 파일을 실행할 때 문제는 현재 작업 디렉토리입니다.

fopen() 함수의 전체 경로를 전달할 수 없습니까?

관련 문제