version 1.3, 2001/04/25 22:20:55
|
version 1.35.8.1, 2013/06/03 22:35:12
|
|
|
//%///////////////////////////////////////////////////////////////////////////// |
//%LICENSE//////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000 The Open Group, BMC Software, Tivoli Systems, IBM |
// Licensed to The Open Group (TOG) under one or more contributor license |
|
// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with |
|
// this work for additional information regarding copyright ownership. |
|
// Each contributor licenses this file to you under the OpenPegasus Open |
|
// Source License; you may not use this file except in compliance with the |
|
// License. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a | // Permission is hereby granted, free of charge, to any person obtaining a |
// copy of this software and associated documentation files (the "Software"), | // copy of this software and associated documentation files (the "Software"), |
|
|
// and/or sell copies of the Software, and to permit persons to whom the | // and/or sell copies of the Software, and to permit persons to whom the |
// Software is furnished to do so, subject to the following conditions: | // Software is furnished to do so, subject to the following conditions: |
// | // |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
// The above copyright notice and this permission notice shall be included |
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
// in all copies or substantial portions of the Software. |
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
|
// DEALINGS IN THE SOFTWARE. |
|
// |
|
//============================================================================== |
|
// | // |
// Author: Mike Brasher (mbrasher@bmc.com) |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
|
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
|
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
|
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// | // |
// Modified By: |
////////////////////////////////////////////////////////////////////////// |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
| |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <Pegasus/Common/String.h> | #include <Pegasus/Common/String.h> |
#include <Pegasus/Common/Exception.h> |
#include <Pegasus/Common/InternalException.h> |
|
#include <Pegasus/Common/Linkage.h> |
|
#include <Pegasus/Common/AutoPtr.h> |
|
|
|
#if defined(PEGASUS_OS_SOLARIS) |
|
# include <sys/param.h> |
|
#endif |
|
|
|
#if defined(PEGASUS_OS_TYPE_WINDOWS) |
|
# include <io.h> |
|
#else // if defined(PEGASUS_OS_TYPE_UNIX) || defined (PEGASUS_OS_VMS) |
|
# include <dirent.h> |
|
#endif |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
struct DirRep; |
#if defined(PEGASUS_OS_TYPE_WINDOWS) |
|
|
|
typedef struct |
|
{ |
|
# if _MSC_VER < 1300 |
|
long file; |
|
# else |
|
intptr_t file; |
|
# endif |
|
struct _finddata_t findData; |
|
} DirRep; |
|
|
|
#else // if defined(PEGASUS_OS_TYPE_UNIX) || defined (PEGASUS_OS_VMS) |
|
|
|
struct DirRep |
|
{ |
|
DIR* dir; |
|
struct dirent* entry; |
|
|
|
# ifdef PEGASUS_OS_SOLARIS |
|
private: |
|
char buf[sizeof(dirent) + MAXNAMELEN]; |
|
public: |
|
struct dirent& buffer; |
|
inline DirRep() |
|
: buffer(*reinterpret_cast<struct dirent *>(buf)) |
|
{ } |
|
# else /* ifdef PEGASUS_OS_SOLARIS */ |
|
struct dirent buffer; |
|
# endif /* ifdef PEGASUS_OS_SOLARIS */ |
|
}; |
|
#endif |
| |
/** |
/** The Dir class provides a platform independent way of iterating the |
The Dir class provides a platform independent way of iterating the |
|
files in a directory. | files in a directory. |
*/ | */ |
class PEGASUS_COMMON_LINKAGE Dir | class PEGASUS_COMMON_LINKAGE Dir |
{ | { |
public: | public: |
| |
/** Start this iterator class on the given path. |
/** Starts this iterator class on the given path. |
@param String path is the path to the target directory | @param String path is the path to the target directory |
@return | @return |
@exception Exception "CannotOpenDirectory thrown if the directory cannot |
@exception throws CannotOpenDirectory if invalid directory. |
be opened. |
|
<pre> | <pre> |
Example builds a String array of file names from current directory |
char* path = "." |
char* path = "./" |
|
Array<String> fileList; |
|
try | try |
{ | { |
for (Dir dir(path); dir.more(); dir.next()) | for (Dir dir(path); dir.more(); dir.next()) |
{ | { |
String name = dir.getName(); |
cout << "name: " << dir.getName() << endl; |
if (String::equal(name, ".") || String::equal(name, "..")) |
|
continue; |
|
paths.append(name); |
|
} | } |
return true; |
|
} | } |
catch(CannotOpenDirectory&) | catch(CannotOpenDirectory&) |
{ | { |
return false; |
// Error! |
} | } |
</pre> | </pre> |
*/ | */ |
Dir(const String& path); | Dir(const String& path); |
| |
/// Release any iterator resources. |
/** Release any iterator resources. */ |
~Dir(); | ~Dir(); |
| |
/// Return true if there are more file names to iterator. |
/** Return true if there are more file names to iterator. */ |
Boolean more() const { return _more; } | Boolean more() const { return _more; } |
| |
/** Return the current file name: |
|
@return Returns a C string pointer to the current filename. |
/** Returns the current file name. */ |
*/ |
|
const char* getName() const; | const char* getName() const; |
| |
/// Advance the iterator: |
/** Advance to next file in directory. */ |
void next(); | void next(); |
| |
private: | private: |
| |
Boolean _more; | Boolean _more; |
Boolean _isValid; |
String _path; |
DirRep* _rep; |
DirRep _dirRep; |
}; | }; |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |