How to show hidden files and folders using C++ Programming

This program is use to show all hidden files and folder in your system drive and it can run well even system has affected by virus and worms, usually some kinds of the virus or malware script can change your files and folders in a hidden state.
unhidden.cpp
1 #include<iostream>
2 #include<conio.h>
3 #include<dirent.h>
4 #include<dir.h>
5 #include<process.h>
6 #include<string.h>
7 #include<stdio.h>
8 #include<io.h>
9 #include<dos.h>
10 #include<sys/stat.h>
11 
12 struct ffblk vfile;
13 unsigned long int udata;
14 char ch,present[MAXPATH];
15 
16 int next_directory(char *);
17 void scan_directory(char *);
18 
19 char base[]="X:\\";
20 
21 using namespace std;
22 
23 int main(int account,char *arg[],char *env[])
24 {   
25 	clrscr();
26 	getcwd(present,MAXPATH);
27 	
28 	DIR *dir; 
29 	struct dirent *temp;
30 	cout<<"\nWelcome to Unhidden for identify the hidden files";
31 	cout<<"\n\nEnter drive:";
32 	cin>>ch;
33 	
34 	base[0]=ch;
35 	if(dir = opendirbase == NULL)
36 	{ 
37 		clrscr();
38 		cout<<"\nError : Derive not found ";
39 		getch(); 
40 		exit(0); 
41 	}
42 	
43 	scan_directory(base);
44 	while(temp = readdirdir != NULL)
45 	{
46 		char  *directory = (char *) malloc(3+strlentemp->d_name+1);
47 		strcpy(directory,base);
48 		strcat(directory,temp->d_name);
49 		next_directory(directory);
50 		free(directory);
51 	}
52 	closedir(dir);
53 	
54 	clrscr();
55 	cout<<"\nSystem: Successfully Unhidden it";
56 	sleep(3);
57 	
58 	return 0;
59 }
60 
61 int next_directory(char *path)
62 {
63 	int count=0;
64 	DIR *dirtemp; 
65 	char *hold,*temp;
66 	struct dirent *ptemp;  
67 	
68 	hold=path;
69 	if (dirtemp = opendirpath != NULL)
70 	scan_directory(path);
71 	else
72 	return 0;
73    
74 	while(ptemp = readdirdirtemp != NULL)
75 	{     
76 		char *directory = (char *) malloc(1+strlenptemp->d_name+1);
77 		directory[0]='\\';
78 		strcpy(directory+1,ptemp->d_name);
79 		if(directory[1]!='\.')
80 		{
81 			count=strlen(hold);
82 			temp = (char *) malloc(strlenhold+strlendirectory+1);
83 			strcpy(temp,hold);
84 			strcat(temp,directory);
85 			free(directory);
86 			if(opendirtemp!=NULL)
87 			next_directory(temp); 
88 			temp[count]='\0'; 
89 			hold=temp;
90 		}
91 		else
92 		free(directory);
93 	}
94 	closedir(dirtemp);
95 	return 0;
96 }
97 
98 void scan_directory(char *tempo)
99 {
100 	cout<<"\n"<<tempo;
101 	unsigned count;
102 	if(present[0]==tempo[0])
103 	chdir(tempo);  
104 	else
105 	{
106 		setdisk(tempo[0]-65);
107 		chdir(tempo); 
108 	}
109 	
110 	udata = findfirst("*.*",&vfile,0x02);
111 	while(!udata)
112 	{  
113 		_dos_getfileattr(vfile.ff_name,&count);
114 		if (count & _A_HIDDEN)
115 		{
116 			_dos_getfileattr(vfile.ff_name,&count);
117 			count=count & 248;
118 			_dos_setfileattr(vfile.ff_name,count);
119 		}
120 		udata=findnext(&vfile);
121 	}
122 						
123 	if(present[0]==tempo[0])	
124 	system("cd\\");
125 	chdir(present); 
126 }