다음과 같은 제안 된 코드에서 폴더/디렉토리 모양 만들려면 :
- 이 질문에 대한 의견의 대부분을 구현을
- 재귀
- 이 계속 추가 할 수있는 결정을 분리 방지 새 항목을 실제로 추가 한 항목.
- 깨끗하게
- 각 헤더 파일
- 주의를 포함하는 이유 문서 컴파일 : 대부분의 항목이 제대로 확인 된 오차됩니다; 그러나,
fputs()
에 대한 호출은 에러가 나는 누락 된 디렉토리를 만들 mkdir
를 사용하는 당신에게 그것을 떠날거야
을 확인해야합니다.
mkdir
에 대한 호출이 성공했는지 또는 프로그램을 처음 실행할 때 성공하지 않았는지 확인하십시오. 다음 프로그램을 실행하면 mkdir
이 실패합니다. 지금
그리고 제안 된 코드 :
#include <stdio.h> // perror(), printf(), fprintf(),
// fgets(), fputs(),
// fopen(), fclose()
#include <stdlib.h> // system(), exit(), EXIT_FAILURE
#include <string.h> // strlen(), strchr()
#define MAX_NOME_LEN 30
// prototypes
void inslivros(void);
int main(void)
{
int escolha = 1;
system("cls");
while(escolha)
{
printf("1- Adicionar livro\n"
"0- Voltar para o menu\n-> ");
if(1 != scanf("%d", &escolha))
{
fprintf(stderr, "scanf for escolha failed\n");
exit(EXIT_FAILURE);
}
// implied else, scanf successful
switch(escolha)
{
case 1:
inslivros();
break;
case 0:
puts("exiting");
break;
default: // user entered an invalid menu selection
puts("invalid menu selection, try again");
break;
} // end switch()
} // end while()
} // end function: main
void inslivros()
{
char livro[ MAX_NOME_LEN ];
int categoria;
printf("Qual é o nome do livro que vai inserir?\n-> ");
//gets(livro);
if(! fgets(livro, sizeof livro, stdin))
{
perror("fgets for line to insert failed");
exit(EXIT_FAILURE);
}
// implied else, fgets successful
// remove trailing newline
char * newline;
if((newline = strchr(livro, '\n')))
{
*newline = '\0';
}
printf("Qual é a categoria do livro?\n"
"1- Romance\n"
"2- História\n-> ");
if(1 != scanf("%d", &categoria))
{
fprintf(stderr, "scanf to input the 'categoria' failed\n");
exit(EXIT_FAILURE);
}
//implied else, scanf successful
FILE *livros = NULL;
switch(categoria)
{
case 1:
if(! (livros = fopen("C:\\Livros\\inserelivros.txt", "a")))
{
perror("fopen for inserelivros.txt failed");
exit(EXIT_FAILURE);
}
// implied else, fopen successful
fputs(livro, livros);
fclose(livros);
FILE *romance;
if(!(romance = fopen("C:\\Livros\\romance.txt", "a")))
{
perror("fopen for romance.txt failed");
exit(EXIT_FAILURE);
}
// implied else, fopen successful
fputs(livro, romance);
fclose(romance);
system("cls");
printf("Livro inserido com Sucesso!\n");
break;
case 0:
printf("Historia not yet implemented\n");
break;
default:
system("cls");
//printf("Nome inválido!\n");
printf("invalid menu selection\n");
break;
} // end switch()
} // end function: inslivros
댓글이 확장 된 논의하지 않습니다; 이 대화는 [채팅으로 이동되었습니다] (http://chat.stackoverflow.com/rooms/161535/discussion-on-question-by-rodrigo-silva-c-file-creation-not-working). – Andy
디렉토리 경로를 만들어야 할 필요가 있다면 [C++/Linux에서 어떻게 디렉토리를 만들 수 있습니까?] (https://stackoverflow.com/questions/675039/how-can-i-create-directory- tree-in-c-linux/675193 # 675193) 대답은 C와 C++ 코드입니다. 'mkdir()'시스템 호출을 사용하고 경로 구분자를 제외하고는 윈도우즈에서 OK로 작동해야한다. (슬래시를 윈도우에서 처리하지만 일반적으로 백 슬래시를 사용한다. –