0

Thanks you guys..
I have one more question. I'm programming recursive directory traverse function.
It will be called from main program with absolute directory name.
I could printout in a simple 2~3 depth directory.
But I could not in complex structure.
(/lib/modules has two directory, and inside there, files and directories are gathered)
I think my program can not come back to called point.
I think chdir("..") or return is proper to process returning to called point.
Should I use depth counter or something else?
Thanks you.

void print_title(int oflag, char* output)
   {
	ofstream myout; 
	myout.open(output);

	if(oflag == 1) 
	   {
		cout << "Output file is " << output << endl;
		myout << "--------- Directory file information ---------" << endl;
	   }
	else
		cout << "--------- Directory file information ---------" << endl;
   }


void list_dir(char* dir1_nm)  //List directory function
{
	DIR *pdir;  //Open directory variable
	pdir = opendir(dir1_nm);
	int icount = 0;	//Count for file number
	char in_addr[255] = {0};	
	char dir2_nm[255];   //Passing subdirectory name
	char file_nm1[255];  //Making absolute path
	struct dirent *entry;   //Directory read structure 
	struct stat statbuf;    //File inode information structure
	strcpy(in_addr, dir1_nm); 
	if(chdir(dir1_nm) < 0)
		{
			printf("DIR : %s \n", dir1_nm);
			perror("chdir ");
			exit(1);
		}


	while ((entry = readdir(pdir)) != NULL)  
	{		
		stat(entry->d_name, &statbuf); //Using file name, getting link info	
		if (strcmp(entry->d_name, ".") == 0)  //If current directory, don't process
			continue;
		else if (strcmp(entry->d_name, "..") == 0) //Don't process parent directory
			continue;
		else if((entry->d_type) == DT_REG) //Process regular file
			{
				cout << "file_nm1 = " << getcwd(dir1_nm, 256) << "/" << entry->d_name << endl;
			}  //end else
		else if((entry->d_type) == DT_DIR)
	  		{
				cout << "directory is " << getcwd(dir1_nm, 256) << "/" << entry->d_name << endl;
				strcpy(dir2_nm, dir1_nm);
				strcat(dir2_nm, "/");
				strcat(dir2_nm, entry->d_name);	
				list_dir(dir2_nm);   //Recursive function call
			}
					
	closedir (pdir);   //Close reading input directory
       }
	//chdir("..");
return;
}

Edited by mikabark: n/a

2
Contributors
1
Reply
2
Views
7 Years
Discussion Span
Last Post by Ancient Dragon
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.