Chaste Commit::1fd4e48e3990e67db148bc1bc4cf6991a0049d0c
FileFinder Class Reference

#include <FileFinder.hpp>

+ Inheritance diagram for FileFinder:
+ Collaboration diagram for FileFinder:

Public Member Functions

 FileFinder ()
 
 FileFinder (const std::string &rPath, RelativeTo::Value relativeTo)
 
 FileFinder (const std::string &rLeafName, const FileFinder &rParentOrSibling)
 
 FileFinder (const fs::path &rPath)
 
virtual ~FileFinder ()
 
virtual void SetPath (const std::string &rPath, RelativeTo::Value relativeTo)
 
virtual void SetPath (const std::string &rLeafName, const FileFinder &rParentOrSibling)
 
bool IsPathSet () const
 
bool Exists () const
 
bool IsFile () const
 
bool IsDir () const
 
bool IsEmpty () const
 
std::string GetAbsolutePath () const
 
bool IsNewerThan (const FileFinder &rOtherEntity) const
 
std::string GetLeafName () const
 
std::string GetLeafNameNoExtension () const
 
std::string GetExtension () const
 
FileFinder GetParent () const
 
std::string GetRelativePath (const FileFinder &rBasePath) const
 
FileFinder CopyTo (const FileFinder &rDest) const
 
void Remove () const
 
void DangerousRemove () const
 
std::vector< FileFinderFindMatches (const std::string &rPattern) const
 
bool operator< (const FileFinder &otherFinder) const
 

Static Public Member Functions

static bool IsAbsolutePath (const std::string &rPath)
 
static void ReplaceSpacesWithUnderscores (std::string &rPath)
 
static void ReplaceUnderscoresWithSpaces (std::string &rPath)
 
static void FakePath (RelativeTo::Value fakeWhat, const std::string &rFakePath)
 
static void StopFaking ()
 

Private Member Functions

void PrivateRemove (bool dangerous=false) const
 

Private Attributes

std::string mAbsPath
 

Static Private Attributes

static bool msFaking = false
 
static RelativeTo::Value msFakeWhat = RelativeTo::Absolute
 
static std::string msFakePath = ""
 

Detailed Description

A helper class for finding files or directories, given paths which can be relative to various locations (e.g. the Chaste source tree root, the current directory, the Chaste test output directory, or an absolute path).

Definition at line 70 of file FileFinder.hpp.

Constructor & Destructor Documentation

◆ FileFinder() [1/4]

FileFinder::FileFinder ( )

Default constructor for subclasses to use. They should call SetPath() in their constructor.

This also allows classes to store a FileFinder instance that hasn't been properly set up yet, and assign to it later using operator=.

Definition at line 77 of file FileFinder.cpp.

Referenced by CopyTo(), FindMatches(), GetParent(), and PrivateRemove().

◆ FileFinder() [2/4]

FileFinder::FileFinder ( const std::string &  rPath,
RelativeTo::Value  relativeTo 
)

Main constructor.

Parameters
rPaththe path to the file/dir to find
relativeTohow to interpret this path

Definition at line 82 of file FileFinder.cpp.

References SetPath().

◆ FileFinder() [3/4]

FileFinder::FileFinder ( const std::string &  rLeafName,
const FileFinder rParentOrSibling 
)

Find a file (or folder) relative to some file or directory. If the second argument is a directory, we look for the given leaf name within it. If the second argument is a file, then we look for a sibling. An exception is raised if rParentOrSibling does not exist.

Parameters
rLeafNamethe leaf name of the file/dir to find
rParentOrSiblingwhere to look for it

Definition at line 87 of file FileFinder.cpp.

References SetPath().

◆ FileFinder() [4/4]

FileFinder::FileFinder ( const fs::path &  rPath)

Conversion constructor from a std::filesystem path object. Note that since fs::path has a conversion constructor from std::string, this allows us to be initialised with a string or character constant, too. The path will be interpreted as relative to the current working directory, unless it is an absolute path.

Parameters
rPaththe path to the file/dir to find

Definition at line 92 of file FileFinder.cpp.

References RelativeTo::Absolute, and SetPath().

◆ ~FileFinder()

FileFinder::~FileFinder ( )
virtual

Needed because we have virtual methods.

Definition at line 97 of file FileFinder.cpp.

Member Function Documentation

◆ CopyTo()

FileFinder FileFinder::CopyTo ( const FileFinder rDest) const

Copy this file or folder (recursively in the latter case) to the given destination. If the destination is a folder that exists, the source will be copied with the same name inside that folder. Otherwise the source will be copied with the given destination name.

If the source is a file and the destination is a file that exists it will be removed prior to copying. If the source is a folder and the destination is a file that exists then an error is thrown.

Parameters
rDestwhere to copy to
Returns
a finder for the copied entity

Definition at line 309 of file FileFinder.cpp.

References FileFinder(), EXCEPTION, Exists(), IsDir(), IsFile(), and mAbsPath.

Referenced by CellMLToSharedLibraryConverter::ConvertCellmlToSo(), HeartConfig::CopySchema(), CardiacSimulation::CreateAndRun(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::save(), and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::save().

◆ DangerousRemove()

void FileFinder::DangerousRemove ( ) const

This method will allow you to remove any file from under either * CHASTE_TEST_OUTPUT or * the source tree (but not elsewhere).

For this reason it is a very dangerous operation and should not be used if Remove could be instead.

BEWARE: if you have managed to set CHASTE_TEST_OUTPUT to "/" this could wipe your system!

Definition at line 426 of file FileFinder.cpp.

References PrivateRemove().

Referenced by CellMLToSharedLibraryConverter::ConvertCellmlToSo().

◆ Exists()

◆ FakePath()

void FileFinder::FakePath ( RelativeTo::Value  fakeWhat,
const std::string &  rFakePath 
)
static

For testing purposes, fake the value of one of the normally fixed paths, e.g. ChasteSourceRoot.

Parameters
fakeWhatwhich path to fake
rFakePathits fake value

Definition at line 558 of file FileFinder.cpp.

References msFakePath, msFakeWhat, and msFaking.

◆ FindMatches()

std::vector< FileFinder > FileFinder::FindMatches ( const std::string &  rPattern) const
Returns
a list of files in this folder matching a simple glob pattern. This method must be called on a FileFinder that points at a folder, and the pattern will be matched against file (or folder) names in that folder. The pattern can use a subset of shell-style glob syntax. A '?' anywhere in the string matches any single character at that position. A '*' may be used at the start or end of the string to match any number of leading or trailing characters, respectively. Hidden files (names starting with a '.') will never be matched. Returns a sorted alphabetical list.
Parameters
rPatternthe pattern to match names against

Definition at line 431 of file FileFinder.cpp.

References FileFinder(), EXCEPTION, IsDir(), and mAbsPath.

Referenced by CellMLToSharedLibraryConverter::ConvertCellmlToSo(), and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::save().

◆ GetAbsolutePath()

◆ GetExtension()

std::string FileFinder::GetExtension ( ) const
Returns
the extension of the leaf name of this file or directory, if any. The '.' will be included in the extension if an extension exists.

Definition at line 249 of file FileFinder.cpp.

References mAbsPath.

Referenced by AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::save().

◆ GetLeafName()

std::string FileFinder::GetLeafName ( ) const
Returns
the leaf name of this file or directory.

i.e. the individual file or directory name and none of the preceding folders on its path.

Definition at line 239 of file FileFinder.cpp.

References mAbsPath.

Referenced by CellMLLoader::LoadCellMLFile().

◆ GetLeafNameNoExtension()

std::string FileFinder::GetLeafNameNoExtension ( ) const
Returns
the leaf name of this file or directory, with any file extension removed.

i.e. the individual file or directory name and none of the preceding folders on its path.

Definition at line 244 of file FileFinder.cpp.

References mAbsPath.

Referenced by FibreConverter::Convert(), CellMLToSharedLibraryConverter::ConvertCellmlToSo(), CellMLLoader::LoadCellMLFile(), and AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::save().

◆ GetParent()

FileFinder FileFinder::GetParent ( ) const
Returns
a finder for the folder containing this file or directory.

Definition at line 254 of file FileFinder.cpp.

References FileFinder(), RelativeTo::Absolute, and mAbsPath.

Referenced by FibreConverter::Convert(), CellMLToSharedLibraryConverter::ConvertCellmlToSo(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::save(), and SetPath().

◆ GetRelativePath()

std::string FileFinder::GetRelativePath ( const FileFinder rBasePath) const
Returns
the relative path to this finder from another. Throws if this is not found under rBasePath.
Parameters
rBasePathwhere the returned path should be relative to

Definition at line 264 of file FileFinder.cpp.

References EXCEPTION, and GetAbsolutePath().

Referenced by Hdf5ToMeshalyzerConverter< ELEMENT_DIM, SPACE_DIM >::Hdf5ToMeshalyzerConverter(), Hdf5ToVtkConverter< ELEMENT_DIM, SPACE_DIM >::Hdf5ToVtkConverter(), OutputFileHandler::OutputFileHandler(), and OutputFileHandler::GetRelativePath().

◆ IsAbsolutePath()

bool FileFinder::IsAbsolutePath ( const std::string &  rPath)
static

◆ IsDir()

◆ IsEmpty()

bool FileFinder::IsEmpty ( ) const
Returns
true if this is a file of size zero or if this is a folder, whether it contains no non-hidden items. If this doesn't exist, throws.

Definition at line 197 of file FileFinder.cpp.

References EXCEPTION, IsDir(), IsFile(), and mAbsPath.

◆ IsFile()

bool FileFinder::IsFile ( ) const
Returns
true if we are pointing at a file

Definition at line 187 of file FileFinder.cpp.

References mAbsPath.

Referenced by Hdf5ToMeshalyzerConverter< ELEMENT_DIM, SPACE_DIM >::Hdf5ToMeshalyzerConverter(), OutputFileHandler::CopyFileTo(), CopyTo(), IsEmpty(), and PrivateRemove().

◆ IsNewerThan()

bool FileFinder::IsNewerThan ( const FileFinder rOtherEntity) const
Returns
true if this file/dir is newer than another file/dir. Compares modification times.
Parameters
rOtherEntitythe entity to test against.

Definition at line 232 of file FileFinder.cpp.

References Exists(), and mAbsPath.

Referenced by CellMLToSharedLibraryConverter::Convert().

◆ IsPathSet()

◆ operator<()

bool FileFinder::operator< ( const FileFinder otherFinder) const

Provide a sort operator to get a logical ordering from FindMatches it orders by alphabetical (or ASCII really).

Parameters
otherFinderAnother FileFinder
Returns
Whether this FileFinder is earlier in the alphabetical ordering than otherFinder

Definition at line 553 of file FileFinder.cpp.

References GetAbsolutePath(), and mAbsPath.

◆ PrivateRemove()

void FileFinder::PrivateRemove ( bool  dangerous = false) const
private

This is code common to Remove() and DangerousRemove(). Should remain private and not to be called from elsewhere. Remove() is only allowed to delete things with a .chaste_deletable_folder in the testoutput directory.

DangerousRemove() is allowed to delete anything in the source or testoutput directories.

Parameters
dangerouswhether we are doing a dangerous remove.

Definition at line 357 of file FileFinder.cpp.

References FileFinder(), RelativeTo::ChasteBuildRoot, RelativeTo::ChasteSourceRoot, EXCEPTION, Exists(), GetAbsolutePath(), OutputFileHandler::GetChasteTestOutputDirectory(), IsFile(), mAbsPath, OutputFileHandler::SIG_FILE_NAME, and ChastePosixPathFixer::ToPosix().

Referenced by DangerousRemove(), and Remove().

◆ Remove()

void FileFinder::Remove ( ) const

Recursively remove this file or folder. Since this is a potentially very dangerous operation, only locations under the Chaste test output folder may be removed.

Only folders created by an OutputFileHandler, or the contents of such a folder, may be deleted (folders that have .chaste_deletable_folder present).

If you need to delete a file or folder without .chaste_deletable_folder, then you have to use DangerousRemove().

Definition at line 421 of file FileFinder.cpp.

References PrivateRemove().

Referenced by CylindricalHoneycombMeshGenerator::CylindricalHoneycombMeshGenerator(), HoneycombMeshGenerator::HoneycombMeshGenerator(), ToroidalHoneycombMeshGenerator::ToroidalHoneycombMeshGenerator(), OutputDirectoryFifoQueue::CreateNextDir(), ImmersedBoundaryCellPopulation< DIM >::GetTetrahedralMeshForPdeModifier(), and VertexBasedCellPopulation< DIM >::GetTetrahedralMeshForPdeModifier().

◆ ReplaceSpacesWithUnderscores()

void FileFinder::ReplaceSpacesWithUnderscores ( std::string &  rPath)
static

Replace any spaces in a path or filename with underscores.

Parameters
rPatha path or file name

Definition at line 531 of file FileFinder.cpp.

◆ ReplaceUnderscoresWithSpaces()

void FileFinder::ReplaceUnderscoresWithSpaces ( std::string &  rPath)
static

Replace any underscores in a path or filename with spaces (for making titles etc.).

Parameters
rPatha path or file name

Definition at line 542 of file FileFinder.cpp.

◆ SetPath() [1/2]

void FileFinder::SetPath ( const std::string &  rLeafName,
const FileFinder rParentOrSibling 
)
virtual

Change this FileFinder to point at a new location, relative to some file or directory.

Parameters
rLeafNamethe leaf name of the file/dir to find
rParentOrSiblingwhere to look for it

Definition at line 161 of file FileFinder.cpp.

References RelativeTo::Absolute, EXCEPTION, Exists(), GetAbsolutePath(), GetParent(), IsDir(), and SetPath().

◆ SetPath() [2/2]

◆ StopFaking()

void FileFinder::StopFaking ( )
static

Stop faking one of the fixed paths.

Definition at line 565 of file FileFinder.cpp.

References msFaking.

Member Data Documentation

◆ mAbsPath

std::string FileFinder::mAbsPath
private

◆ msFakePath

std::string FileFinder::msFakePath = ""
staticprivate

The fake value of the faked path.

Definition at line 315 of file FileFinder.hpp.

Referenced by FakePath(), and SetPath().

◆ msFakeWhat

RelativeTo::Value FileFinder::msFakeWhat = RelativeTo::Absolute
staticprivate

Which path to fake.

Definition at line 312 of file FileFinder.hpp.

Referenced by FakePath(), and SetPath().

◆ msFaking

bool FileFinder::msFaking = false
staticprivate

Whether to fake one of the fixed paths, e.g. ChasteSourceRoot.

Definition at line 309 of file FileFinder.hpp.

Referenced by FakePath(), SetPath(), and StopFaking().


The documentation for this class was generated from the following files: