SOL9 2.0 Class: Directory

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * Directory.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL++2000
// 2008/07/10 Modified make method to use wchar_t.

#pragma once

#include <sol\Object.h>
#include <sol\String.h>
#include <sol\StringConverter.h>

#include <io.h>
#include <direct.h>


namespace SOL {

class Directory :public Object {

public:
    Directory() { }

public:
    BOOL    changeDir(const TCHAR* name) {
        return ::SetCurrentDirectory(name);
    }

public:
    DWORD    getCwd(String& dir) {
        TCHAR buff[_MAX_PATH];
        DWORD rc =::GetCurrentDirectory(SizeOf(buff), buff);
        dir = buff;
        return rc;
    }

public:
    BOOL    make(const TCHAR* name, SECURITY_ATTRIBUTES* attr=NULL) {
        BOOL rc = FALSE;

        if (name == NULL) {
            return rc;
        }

        if (name[0] == '\0' || 
            strcmp(name, _T(".")) == 0 ||
            strcmp(name, _T("..")) == 0) {
            return rc;
        }
        if (GetFileAttributes(name) != 0xffffffff) {
            //Already exists
            return rc;
        }

        StringConverter converter;
        wchar_t* dir = converter.toWideChar(name);
        wchar_t* ptr = dir;
        
        const wchar_t DELIM = '\\';

        while(ptr) {
            //Find the DELIM
            ptr = wcschr(ptr, DELIM);
            if(ptr) { 
                //NULL-terminate
                *ptr = Zero;
                if (GetFileAttributesW(dir) == 0xffffffff) {
                    //If dir doesn't exist, create it
                    rc = CreateDirectoryW(dir, attr);
                    if (rc == FALSE) {
                        //If failed, break this loop
                        break;
                    }
                }    
                *ptr = DELIM;

            } else {
                // Not found DELIM
                if (GetFileAttributesW(dir) == 0xffffffff) {
                    // If dir doesn't exist, create it 
                    rc = CreateDirectoryW(dir, attr);
                } else {
                    rc = TRUE;
                }
                break;
            }
            ptr++;
        }

        delete [] dir;

        return rc;
    }

public:
    virtual int remove(const TCHAR* name) {
        return ::RemoveDirectory(name);
    }

public:
    BOOL    exists(const TCHAR* dir) {
        BOOL rc = FALSE;
    
        if (dir != NULL && GetFileAttributes(dir) != 0xffffffff) {
            rc = TRUE;
        }
        return rc;
    }
};

}




Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.