Quantcast
Channel: Programming Forums
Viewing all articles
Browse latest Browse all 51036

Using multiple files in C++

$
0
0
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


Viewing all articles
Browse latest Browse all 51036

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>