I want to list the archives in a directory, and it works. The problem is if I am in "." and i want to list te files inside "./hello" since ".", (ls -l hello) for example. The problem is that I dont know how to add to stat the full path, can anyone help me please?. I have this code:

else if(strcmp(O->argv[1], "-l")==0){
  if(O->argv[2]==NULL){
      dir=getcwd(buffer,256);
      printf("%s \n",dir);
  }
  else {
     dir=getcwd(buffer,256);
     strcat(dir,"/");
     strcat(dir,O->argv[2]);
     printf("%s \n",dir);
  }
  if ((pdirectorio=opendir(dir)) == NULL) //abrir directorio
    printf("Error al abrir el directorio\n");
  else {
    while((directorio=readdir(pdirectorio))!= NULL){
       if((stat(directorio->d_name,&info)) == -1)
          printf("Fin de directorio.\n");
      else {...}
有帮助吗?

解决方案

Just concatenate a filename you get from readdir() to the name of directory you're traversing. Something along the lines of the following:

#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>

#define PATH_MAX 1024

int main(int argc, char **argv) {
  DIR *d;
  struct dirent *e;
  char fullpath[PATH_MAX];
  struct stat st;

  if(argc > 1) {
    if((d = opendir(argv[1])) == NULL) return 1;
  } else
    return 2;

  while ((e = readdir(d)) != NULL) {
    snprintf(fullpath, PATH_MAX, "%s/%s", argv[1], e->d_name);
    if((stat(fullpath, &st)) == 0)
      printf("Did stat(%s) and got block count %u.\n",
        fullpath, st.st_blocks);
  }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top