shithub: aacenc

ref: 5603f1be4bf0e960ccba8fa513594d52cd5ac347
dir: /wingui/RecursiveDirectoryTraverser.h/

View raw version
// RecursiveDirectoryTraverser.h: interface for the CRecursiveDirectoryTraverser class.
// Author: Torsten Landmann
//
// This class is made for finding files within a directory tree.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_RECURSIVEDIRECTORYTRAVERSER_H__99D7AE61_17EB_11D5_8402_0080C88C25BD__INCLUDED_)
#define AFX_RECURSIVEDIRECTORYTRAVERSER_H__99D7AE61_17EB_11D5_8402_0080C88C25BD__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "TItemList.h"

class CRecursiveDirectoryTraverser  
{
public:
	CRecursiveDirectoryTraverser();
	virtual ~CRecursiveDirectoryTraverser();

	// the filter string may be a directory name, a file, or a directory
	// name with a file filter;
	// returns -1 in case of errors
	static int CountMatchingFiles(const CString &oFilterString);

	// this method finds all files that are in the specified directory
	// and match the filter; it can walk recursively through the entire
	// subtree returning all files in the subtree that match the filter;
	// in this case directory names are NOT matched against the filter;
	// return value: a list of complete paths of the files found;
	// this method displays error messages and returns an empty list in case
	// of errors; if bAcceptDirectories is true also directories that match
	// the filter will be returned
	static TItemList<CString> FindFiles(const CString &oRootDirectory, const CString &oFileNameFilter, bool bRecursive, bool bAcceptDirectories=false);

	// returns if the directory was found or could be created. if false is
	// returned this mostly means that there is a concurring file to 
	// the first directory that needs to be created
	static bool MakeSureDirectoryExists(const CString &oDirectoryPath);

private:

	// example:
	//	before:
	//		oExistingPath=="c:\somewhere\hello\"
	//		oCreatablePath="somewhereelse\super\"
	//	after:
	//		oExistingPath=="c:\somewhere\hello\somewhereelse"
	//		oCreatablePath="super\"
	//////
	// the method physically creates the directory on the disk;
	// returns false in case of errors
	static bool CreateOneDirectory(CString &oExistingPath, CString &oCreatablePath);
};

#endif // !defined(AFX_RECURSIVEDIRECTORYTRAVERSER_H__99D7AE61_17EB_11D5_8402_0080C88C25BD__INCLUDED_)