fork download
  1. #include <dirent.h>
  2. #include <stdio.h>
  3. #include <iostream>
  4. #include <ctime>
  5. #include <string>
  6. #include <unistd.h>
  7. #include <stdio.h>
  8. #include <cstring>
  9. #include <vector>
  10. #include <sys/stat.h>
  11. #include <stdlib.h>
  12. using namespace std;
  13.  
  14. class directories
  15. {
  16. string presentDir;
  17. vector<string> dirToCheck;
  18. bool NoDirectories;
  19. public:
  20. directories()
  21. {
  22. NoDirectories=0;
  23. string startPoint;
  24. cout<<"Whats your start point? example:1) \"/\" 2) \"/piotr\""<<endl;
  25. cin>>startPoint;
  26. cout<<"Found"<<endl<<endl;
  27. dirToCheck.push_back(startPoint);
  28. }
  29. ~directories()
  30. {
  31. ;
  32. }
  33. bool SearchNotFinished();
  34. bool canSearch();
  35. string searchPos();
  36. void addDir(string newDir);
  37. };
  38.  
  39. bool directories::SearchNotFinished()
  40. {
  41. return(!NoDirectories);
  42. }
  43.  
  44. bool directories::canSearch()
  45. {
  46. if (dirToCheck.empty())
  47. {
  48. NoDirectories=1;
  49. return(0);
  50. }
  51. else
  52. {
  53. presentDir=dirToCheck.back();
  54. dirToCheck.pop_back();
  55. return(1);
  56. }
  57. }
  58.  
  59. string directories::searchPos()
  60. {
  61. return(presentDir);
  62. }
  63.  
  64. void directories::addDir(string newDir)
  65. {
  66. dirToCheck.push_back(newDir);
  67. }
  68.  
  69. int main()
  70. {
  71. DIR *dir;
  72. struct dirent *dp;
  73. struct stat statbuf;
  74. string strFile, findName;
  75.  
  76. cout<<"what are you searching for?"<<endl;
  77. cin>>findName;
  78.  
  79. directories doSearch;
  80.  
  81. while(doSearch.SearchNotFinished())
  82. {
  83. if(doSearch.canSearch())
  84. {
  85. dir= opendir(doSearch.searchPos().c_str());
  86.  
  87. while ((dp = readdir(dir))!=NULL)
  88. {
  89. strFile=dp->d_name;
  90. int pos = strFile.find(findName);
  91. if (pos!=(string::npos))
  92. {
  93. if(doSearch.searchPos()=="/")
  94. {
  95. printf("%s\n",(doSearch.searchPos()+strFile).c_str());
  96. }
  97. else
  98. {
  99. printf("%s\n",(doSearch.searchPos()+"/"+strFile).c_str());
  100. }
  101. }
  102.  
  103. if ((strFile!=".")&&(strFile!="..")&&(strFile!="proc")&&(strFile!="sys")&&(strFile!="dev")&&(strFile!="Trash"))
  104. {
  105. if(doSearch.searchPos()=="/")
  106. {
  107. stat((doSearch.searchPos()+strFile).c_str(),&statbuf);
  108. }
  109. else
  110. {
  111. stat((doSearch.searchPos()+"/"+strFile).c_str(),&statbuf);
  112. }
  113.  
  114. if ((statbuf.st_mode & S_IFMT) == S_IFDIR)
  115. {
  116. if(doSearch.searchPos()=="/")
  117. {
  118. doSearch.addDir(doSearch.searchPos()+strFile);
  119. }
  120. else
  121. {
  122. doSearch.addDir(doSearch.searchPos()+"/"+strFile);
  123. }
  124. }
  125. }
  126. }
  127. closedir(dir);
  128. }
  129. }
  130. cout<<endl;
  131. }
Runtime error #stdin #stdout 0s 3240KB
stdin
Standard input is empty
stdout
what are you searching for?
Whats your start point? example:1) "/" 2) "/piotr"
Found