C文件创建不起作用

时间:2017-12-19 12:21:57

标签: c file fopen

我正在写作 插入书籍的功能。该功能是 inslivros(); 。这是代码:

int inslivros()
{
    char livro[30];
    int categoria;
    printf("Qual é o nome do livro que vai inserir?\n-> ");
    gets(livro);
    printf("Qual é a categoria do livro?\n1- Romance\n2- História\n-> ");
    scanf("%d", &categoria);
    if(categoria == 1)
    {
        FILE *livros;

        livros = fopen("C:\Livros\inserelivros.txt", "w+");
        fputs(livro, livros);
        fclose(livros);

        FILE *romance;

        romance = fopen("C:\Livros\romance.txt", "w+");
        fputs(livro, romance);
        fclose(romance);

        system("cls");
        printf("Livro inserido com Sucesso!\n");
    }
    else
    {
        int escolha;
        system("cls");
        printf("Nome inválido!\n");
        printf("1- Adicionar livro\n0- Voltar para o menu\n-> ");
        scanf(escolha);
        switch(escolha)
        {
        case 1:
            system("cls");
            inslivros();
        case 2:
            system("cls");
            main();
        }
    }

}

当categoria == 1时,不会创建文件夹和文件。我哪里出错了?

2 个答案:

答案 0 :(得分:2)

  

当categoria == 1时,未创建文件夹和文件。我哪里出错了?

fopen不会为您创建文件夹/目录 - 它只会创建文件。因此,如果在运行程序时不存在C:\Livros,则程序将失败。

要创建文件夹/目录,请查看mkdir

答案 1 :(得分:0)

以下提议的代码:

  1. 实现了对问题的大部分评论
  2. 避免递归
  3. 将决定继续从实际添加新条目中添加条目。
  4. 干净地编译
  5. 记录了为什么要包含每个头文件
  6. 警告:大多数项目都已正确错误检查;但是,对 <user name="userA" password="userApass" authorities="ROLE_A" /> <user name="userB" password="userBpass" authorities="ROLE_B" /> protected String determineTargetUrl(Authentication authentication) { boolean isUserA = false; boolean isUserB= false; Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities(); for (GrantedAuthority grantedAuthority : authorities) { if (grantedAuthority.getAuthority().equals("ROLE_A")) { isUserA = true; break; } else if (grantedAuthority.getAuthority().equals("ROLE_B")) { isUserB = true; break; } } if (isUserA) { return "/pageA.html"; } else if (isUserB) { return "/pageB.html"; } else { throw new IllegalStateException(); } } 的调用也应该进行错误检查
  7. 我会留给您使用fputs()来创建任何丢失的目录。

    请记住检查mkdir的呼叫是否成功,或者在第一次运行程序时是否成功,可能会也可能不会成功。程序的所有后续运行都应该mkdir失败。

    现在建议的代码:

    mkdir