O macro FILENAME_MAX expande para um inteiro que indica o tamanho máximo que uma cadeia de caracteres, representando o caminho de um arquivo, pode conter.
Caso a implementação da biblioteca padrão não apresente uma restrição de tamanho, este macro expande para um inteiro que indica o tamanho máximo recomendado para uma cadeia de caracteres que represente o caminho de um arquivo.
É importante notar que o valor deste macro não indica o tamanho máximo do nome de um arquivo, mas sim da cadeia de caracteres que o contém, ou seja, o caminho de um arquivo. Para o nome do arquivo, existem restrições específicas dependendo do sistema operacional e do sistema de arquivos utilizado. Por exemplo, para um usuário do sistema operacional Windows com o sistema de arquivos NTFS, o nome do arquivo pode conter, no máximo, 255 caracteres.
#include <stdio.h>
#include <string.h>
/* Da referência do fgets */
char* ler_string_seguramente(char* string, int tamanho) {
if (fgets(string, tamanho, stdin) != NULL) {
/* Remove a nova linha (\n), caso ela tenha sido lida pelo fgets */
int indice_ultimo_caractere = strlen(string) - 1;
if (string[indice_ultimo_caractere] == '\n') {
string[indice_ultimo_caractere] = '\0';
}
return string;
}
return NULL;
}
int main() {
char nome_arquivo[FILENAME_MAX];
FILE *arquivo;
printf("Nome do arquivo a ser criado (máximo de %d caracteres): ", FILENAME_MAX);
ler_string_seguramente(nome_arquivo, FILENAME_MAX);
arquivo = fopen(nome_arquivo, "r");
if (arquivo != NULL) {
fprintf(stderr, "O arquivo %s já existe.\n", nome_arquivo);
fclose(arquivo);
return -1;
}
arquivo = fopen(nome_arquivo, "w");
if (arquivo == NULL) {
fprintf(stderr, "Erro ao criar o arquivo %s.\n", nome_arquivo);
return -2;
}
printf("Arquivo criado.\n");
fclose(arquivo);
return 0;
}