2013-03-14 3 views
3

첫 번째 게시물 :) 프로그래밍 분야에 대한 기본 학습 단계로 C 언어를 시작합니다. 텍스트 파일에서 문자열을 읽고, 해당 문자열 이름으로 디렉토리를 만들고, 생성 된 디렉토리에 쓰기위한 파일을 여는 다음 코드를 사용하고 있습니다.C의 파일 I/O 관리

#include <stdio.h> 
#include <stdlib.h> 
#include <direct.h> 
#include <string.h> 

int main() 
{ 
    char file_name[25], cwd[100]; 
    FILE *fp, *op; 

    fp = fopen("myfile.txt", "r"); 

    if (fp == NULL) 
    { 
     perror("Error while opening the file.\n"); 
     exit(EXIT_FAILURE); 
    } 

    fgets(file_name, 25, fp); 

    _mkdir(file_name); 

     if (_getcwd(cwd,sizeof(cwd)) != 0) 
    { 
     fprintf(stdout, "Your dir name: %s\\%s\n", cwd,file_name); 

     op = fopen("cwd\\file_name\\mynewfile.txt","w"); 
     fclose(op); 
    } 
    fclose(fp); 
    return 0; 
} 
+1

기능 _mkdir은 무엇을 수정? direct.h 헤더는 무엇을 하는가? – fuz

+0

디렉토리 이름 (파일 이름)에 무엇을 입력합니까? 또한 생성 한 문자열을 열어야합니다. cwd 및 파일 이름에서 sprintf로; –

답변

2

당신이 필요로하는 열기 전에 C - 문자열 (경로로) 파일 이름을 저장하는 것입니다 : 그러나 만든 디렉토리 안에 파일을 만들 수 아니다, 여기 내 코드입니다. 여는 것은 cwd\file_name\mynewfile.txt입니다. 귀하의 디렉토리 이름이 cwd 인 지 의심 스럽습니다. 샘플이 될 수 있었다 :

char file_path[150]; 
sprintf(file_path, "%s\\%s\\mynewfile.txt", cwd, file_name); 
op = fopen(file_path,"w"); 
+0

고마워, 그 작동 :) –

+1

대신 snprintf를 사용하여 오버플로가 발생하지 않도록 버퍼 크기를 전달하십시오. – LtWorf

+1

'cwd'와'file_name'은 크기가 각각 100과 25 인 배열로 버퍼 오버플로가 있다면이 명령문보다 먼저 발생했을 것입니다. – uba

0

op = fopen("cwd\\file_name\\mynewfile.txt","w”);

당신은 실제로 파일의 경로의 일부로서 문자열 리터럴 "CWD"와 "FILE_NAME"를 전달하는, 당신이 실제로 의미를 생각할 때 거기에 그 이름들을 가진 변수의 내용을 넣으십시오. 경로의 문자열을 함께 모아야 할 것입니다. 난 당신이 반환 값을 사용하는 참조

http://www.cplusplus.com/reference/cstring/strcat/

1

) (strcat와에보고하십시오. 그것은 초보자에게 좋은 시작입니다. "errno.h"를 포함 시켜서 오류 메시지를 수정할 수 있습니다. 자신의 오류 메시지를 인쇄하는 대신

printf("%s", strerror(errno)); 

등의 오류 메시지가 표시 될 수 있습니다.

2

사용

#include <sys/stat.h> 
#include <sys/types.h> 

대신

#include <direct.h> 

하고

op = fopen("cwd\\file_name\\mynewfile.txt","w”); 
+0

내가 직접 stat 대신 stat 및 types 헤더 파일을 사용해야하는 이유를 알 수 있습니까? –

+2

direct.h는 Windows 전용 확장이며 이식 가능하지 않기 때문에 – fuz