1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
#include <iostream>
#include <windows.h>
#include <cstring>
#include <new>
#include <vector>
#include <stack>
#include "directorytree.h"
using namespace std;
directorytree::directorytree()
{
size = 257;
directory = "";
undesired[0] = "+";
undesired[1] = "%2B";
undesired[2] = "%20";
extensions[0] = "doc";
extensions[1] = "docx";
extensions[2] = "ppt";
extensions[3] = "pptx";
} //end default constructor
directorytree::directorytree(node n, string d)
{
thenode = n;
if (GetUserName((TCHAR *)name, &size))
{
directory = "C:/Users/" + (string)name + '/' + d;
} //end if
} //end constructor
void directorytree::createtree(node * a, string dir)
{
if (a != 0)
{
a->value = dir;
h = FindFirstFile((a->value + "/*.").c_str(), &fd);
while ((((string)fd.cFileName == ".") || ((string)fd.cFileName == "..")) && (FindNextFile(h,&fd)))
{
} //end while
if (((string)fd.cFileName != ".") && ((string)fd.cFileName != ".."))
{
if (fd.dwFileAttributes != 16)
{
a->subnodes.push_back(0);
createtree(a->subnodes[0], dir);
} //end if
else
{
hstack.push(h);
fdstack.push(fd);
do
{
dir = a->value + '/' + (string)((fdstack.top()).cFileName);
a->subnodes.push_back(new(nothrow)node);
createtree(a->subnodes.back(), dir);
} //end do
while (FindNextFile(hstack.top(), &(fdstack.top())));
hstack.pop();
fdstack.pop();
} //end else
} //end if
else
{
a->subnodes.push_back(0);
createtree(a->subnodes[0], dir);
} //end else
} //end if
} //end createtree
void directorytree::preorder(node * a, filemanip fobject)
{
if (a != 0)
{
cout << a->value << endl;
fobject = filemanip(a->value);
for (int s = 0; s < 3; s++)
{
for (int t = 0; t < 4; t++)
{
fobject.findfiles(undesired[s], extensions[t]);
} //end inner for
fobject.filerename(undesired[s]);
} //end outer for
for (unsigned pos = 0; pos < a->subnodes.size(); pos++)
{
preorder(a->subnodes[pos],fobject);
} //end for
} //end if
} //end preorder
void directorytree::deletetree(node * a, node * parent)
{
if (a != 0)
{
for(unsigned pos = 0; pos < a->subnodes.size(); ++pos)
{
deletetree(a->subnodes[pos], parent);
} //end for
if (a != parent)
{
cout << "The node for "<<a->value << " got deleted."<<endl;
delete a;
} //end if
} //end if
} //end deletetree
void directorytree::classmain(filemanip fmanip)
{
createtree(&thenode, directory);
preorder(&thenode, fmanip);
deletetree(&thenode, &thenode);
} //end classmain
|