PDA

Visualizza la versione completa : [C] problemi con il segg codice


superflexo
24-09-2009, 14:03
L'obiettivo del mio programma č quello di immagazzinare i nomi di file presenti in una data directory con il loro nome completo (i.e. percorso completo). Per fare ciņ prima uso la funzione readdir() per scrivere i nomi dei file in un array di char chiamato id_n, e poi con la funzione strcat() vorrei creare una stringa che contenga la directory + il nome del file (ovvero il percorso completo del file)...solo che non riesco a fare questo ultimo passaggio in quanto non riesco ad unire la stringa contenente il nome della directory con una delle stringhe contenute in id_n. Qualcuno puņ aiutarmi? Grazie

Qui sotto riporto il codice completo del programma che ho scritto fino ad ora:


#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <dirent.h>
#include <errno.h>

int err_malloc(char s[]);

int main(int argc, char *argv[])
{
DIR *dip;
FILE *dFile;
struct dirent *dit;
struct stat buf;
int i = 0, n, sized, sizef, sizeft, sizetot; //sized e sizef are integer that contains the number of character rispectively of directory name and file name

/* check to see if user entered a directory name */
if (argc < 2){
printf("Usage: %s <directory>\n", argv[0]);
return 0;
}

sized=strlen(argv[1]);
printf("Control: directory name contains %d characters\n",sized);

/* DIR *opendir(const char *name);
*
* Open a directory stream to argv[1] and make sure
* it's a readable and valid (directory) */
if ((dip = opendir(argv[1])) == NULL){
perror("opendir");
return 0;
}

printf("Directory stream is now open\n");

/* struct dirent *readdir(DIR *dir);
*
* Read in the files from argv[1] and print */
sizef=0;
while ((dit = readdir(dip)) != NULL){
if(strcmp(dit->d_name, ".") != 0 && strcmp(dit->d_name, "..") != 0){
printf("\n%s", dit->d_name);
sizeft=strlen(dit->d_name);
if(sizeft>sizef) sizef=sizeft;
i++;
}
}
n=i; //number of file in a directory
sizetot=sized+sizef+1; //maximum length for the string containing the complete path of a file
printf("Control: the longest file name has %d characters\n", sizef);

printf("\nreaddir() found a total of %i files\n", n);
rewinddir(dip);

char *id_n[n];
i=0;
while ((dit = readdir(dip)) != NULL){
if(strcmp(dit->d_name, ".") != 0 && strcmp(dit->d_name, "..") != 0){
*(id_n+i)=dit->d_name;
i++;
}
}

/* int closedir(DIR *dir);
*
* Close the stream to argv[1]. And check for errors. */
if (closedir(dip) == -1){
perror("closedir");
return 0;
}

for(i=0; i<n; i++){
printf("%s\n", *(id_n+i));
}

printf("\nDirectory stream is now closed\n");

char filename[sizetot]; //filename it will be the final string containing the full name of a file
filename[0]='\0'; //inizializzo la variabile filename per evitare caratteri strani al suo interno
strcat(filename, argv[1]);
strcat(filename, id_n[1]);
printf("%s, %s\n",filename, *(id_n+1));

return 1;
}

int err_malloc(char s[])
{
printf("out of memory while allocating %s.\n", s);
return 1;
}

Loading