Arquivos

1. Arquivos

Homero Dias
homerodias

(usa Linux Mint)

Enviado em 01/07/2014 - 19:12h

Estou tentando ler vários arquivos em um diretório Linux utilizando um função em C e não consigo compilar a função. Quando passo o nome do arquivo, o comando funciona, mas sem saber os nomes dos arquivos que estão no diretório, não consigo fazer funcionar. Alguém pode me ajudar?

Grato


  


2. Re: Arquivos

Paulo
paulo1205

(usa Ubuntu)

Enviado em 01/07/2014 - 19:36h

Procure ler sobre as funções opendir(), readdir() e closedir().


3. Diretório

Homero Dias
homerodias

(usa Linux Mint)

Enviado em 02/07/2014 - 13:17h

Estou usando estes comandos e sigo com problemas, pois no retorno só aparece lixo e nada dos arquivos do diretório.

#ifdef JDENV_LINUX

jdeStrcpy( szDiretorio, lpDS->szDiretorio) ;
dir = opendir((char *)szDiretorio);
if( !dir )
{
MathCopy(&dsF5576001.alukid, &lpDS->mnId);
jdeStrcpy( dsF5576001.alcdcpath, _J("Erro opendir")) ;
JDBReturn = JDB_InsertTable(hRequestF5576001,NID_F5576001,(ID)0,(void *)&dsF5576001);
}
else
{
while ((ent = readdir (dir)) != NULL)
{
if ((strcmp(ent->d_name, ".") != 0) &&
(strcmp(ent->d_name, "..") != 0) &&
(strcmp(ent->d_name, "errors") != 0))
{
lpDS->cRetorno = '1';
memset((void *)(&dsF5576001), (int)(_J('{TTEXTO}')), sizeof(F5576001));

jdeSprintf(szTemp, _J("%s"), ent->d_name);

jdeStrcpy(nomeArquivo, szTemp);
MathCopy(&dsF5576001.alukid, &lpDS->mnId);
jdeStrcpy( dsF5576001.alcdcpath, nomeArquivo) ;
JDBReturn = JDB_InsertTable(hRequestF5576001,NID_F5576001,(ID)0,(void *)&dsF5576001);
}
}
closedir(dir);
}

#endif




Alguém pode me ajudar?


4. Re: Arquivos

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/07/2014 - 17:10h

Não faço ideia de que interface é essa (JDE?) que você está usando. Do ponto de vista de funcionalidade básica de opendir()/readdir()/closedir(), ela, os nomes crípticos de variáveis e a omissão dos tipos dessas variáveis na listagem que você postou só atrapalham a leitura do código.

Seria interessante que você mostrasse que tipo de “lixo” você está recebendo, e em qual pedaço do programa.

Mas uma coisa que às vezes surpreende algumas pessoas é que cada entrada que você lê com readdir() é um nome relativo ao (ou dentro do) diretório especificado em opendir().

Uma forma “tradicional” de trabalhar com essas funções seria parecida com o seguinte.

int proc_dir(const char *some_dir){
DIR *dh;
struct dirent *ent;
char ent_path[PATH_MAX+1];
int error_count;

error_count=0;

if((dh=readdir(some_dir))==NULL)
return -1;

while((ent=readdir(dh))!=NULL){
snprintf(ent_path, sizeof ent_path, "%s/%s", some_dir, ent->d_name);
/*
Faz algum processamento sobre o arquivo/diretório indicado por
‘ent_path’. No nosso caso, se o processamento falhar, incrementa-se
o contador de erros ‘error_count’.
*/
if(!process(ent_path))
error_count++;
}
closedir(dh);

return error_count;
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts