Any ideas on how I should make this a multi-file project (I am using Code::Blocks and the GCC compiler):
#include <iostream>
#include <windows.h>
#include <cstring>
#include <new>
#include <vector>
#include <stack>
using namespace std;
struct node
{
string value;
vector <node *> subnodes;
}; //end node
class directorytree
{
private:
stack <HANDLE> hstack;
stack <WIN32_FIND_DATA> fdstack;
HANDLE h;
WIN32_FIND_DATA fd;
node thenode;
string directory;
void createtree(node*, string);
void preorder(node *);
void deletetree(node *, node*);
public:
directorytree(node, string);
void classmain();
}; //end directorytree
directorytree::directorytree(node n, string d)
{
thenode = n;
directory = d;
} //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)
{
if (a != 0)
{
cout << a->value << endl;
if (a->subnodes.size() == 1)
{
preorder(a->subnodes[0]);
} //end if
else
{
for (int pos = 0; pos < (int)(a->subnodes.size()); pos++)
{
preorder(a->subnodes[pos]);
} //end for
} //end else
} //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()
{
createtree(&thenode, directory);
preorder(&thenode);
deletetree(&thenode, &thenode);
} //end classmain
int main()
{
node tree;
directorytree dirtree(tree, "C:/Users/owner/Desktop");
dirtree.classmain();
return 0;
} //end main