Enviado em 31/01/2022 - 14:32h
Acredito que tenho um problema básico pessoal, masnão estou enxergando a resposta. Estou usando a função opendir() e passando como parâmetro um elemento de uma structs. Porém o retorno da opendir() sempre dá: "No such file or directory", erro 2. Só que eu testo a váriável antes de submeter para o opendir() e ela parece com o conteúdo corrento. Se eu coloco um texto fixo no opendir tudo funciona. Mas eu preciso trabalhar com uma variável porque o valor desse diretório está vindo de um arquivo de configuração que o aplicativo lê ao inicializar então tem que funcionar com variável. Abaixo um print da última implementação com ponteiro de char o qual é a definição do parâmetro do opendir(), mas mesmo assim não funcionou. Já testei com vetor de char fixo também, funciona em todas as partes do sistema menos na chamada do opendir(). Já testei na função scandir() também e o comportamento é identico.int monitoraDiretorio(controle *ctr)
{
DIR *dir;
char *s;
int TstFile;
bool bin = true;
while (bin) {
// alocação de memoria dinamica para o ponteiro de caracteres
s = malloc(50);
// Montando caminho a ser trabalhado
strcpy(s,ctr->caminhoOrigem);
printf("\n O nome do diretorio a ser aberto.: %s. \n", s);
dir = opendir(s);
if (dir == NULL) {
// perror("\n Nao pode abrir o diretorio. \n\n");
printf("\n Erro na abertura do diretorio.: %d \n", errno);
printf("\n O nome do erro impresso eh.: %s. \n", strerror (errno));
exit(1);
}else{
printf("Abriu o diretorio com vetor de char s. \n");
struct dirent *lsdir;
while ( ( lsdir = readdir(dir) ) != NULL )
{
if (strcmp(lsdir->d_name,".") == 0)
continue;
if (strcmp(lsdir->d_name,"..") == 0)
continue;
// Adicionando nome do arquivo.
strcat(s,lsdir->d_name);
printf("\n Diretorio com nome de arquivo: %s. \n", s);
// Testa se o arquivo existe
TstFile = fileExists(s);
if (TstFile == 2){
// printf("Entrou no IF == 2. Valor: %d - Diretório %s nao será processado. \n", TstFile, f);
}else if (TstFile == 1){
printf ("\n Processando arquivo %s. \n\n", s);
}else
printf("\n A entrada %s não é um diretório nem um arquivo. \n", s);
}
}
closedir(dir);
sleep(10); // Dormindo por 10 segundos
}
return 0;
}