ENH: add fileName::isBackup() method

- previously part of POSIX.C
This commit is contained in:
Mark Olesen
2018-01-10 10:22:57 +01:00
parent c093095444
commit 2b0eaf2d38
7 changed files with 80 additions and 59 deletions

View File

@ -79,36 +79,7 @@ namespace Foam
// * * * * * * * * * * * * * * Static Functions * * * * * * * * * * * * * * //
//
//! \cond fileScope
//
// Return true if filename appears to be a backup file
//
static inline bool isBackupName(const Foam::fileName& name)
{
if (name.empty())
{
return false;
}
else if (name.back() == '~')
{
return true;
}
// Now check the extension
const Foam::word ext = name.ext();
if (ext.empty())
{
return false;
}
return
(
ext == "bak" || ext == "BAK"
|| ext == "old" || ext == "save"
);
}
// Like fileName "/" global operator, but retain any invalid characters
static inline Foam::fileName fileNameConcat
@ -793,7 +764,7 @@ Foam::fileNameList Foam::readDir
else if
(
(type == fileName::DIRECTORY)
|| (type == fileName::FILE && !isBackupName(name))
|| (type == fileName::FILE && !fileName::isBackup(name))
)
{
if ((directory/name).type(followLink) == type)

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
\\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd.
\\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -122,6 +122,40 @@ bool Foam::fileName::equals(const std::string& s1, const std::string& s2)
}
bool Foam::fileName::isBackup(const std::string& str)
{
if (str.empty())
{
return false;
}
else if (str.back() == '~')
{
return true;
}
// Now check the extension
const auto dot = find_ext(str);
if (dot == npos)
{
return false;
}
const std::string ending = str.substr(dot+1, npos);
if (ending.empty())
{
return false;
}
return
(
ending == "bak" || ending == "BAK"
|| ending == "old" || ending == "save"
);
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::fileName::fileName(const UList<word>& lst)

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
\\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd.
\\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -83,10 +83,10 @@ public:
//- Enumerations to handle file types and modes.
enum Type
{
UNDEFINED,
FILE,
DIRECTORY,
LINK
UNDEFINED, //!< Undefined file type.
FILE, //!< A file
DIRECTORY, //!< A directory
LINK //!< A symlink
};
@ -190,8 +190,8 @@ public:
// Interrogation
//- Return the file type: FILE, DIRECTORY, UNDEFINED or
// LINK (only if followLink=false)
//- Return the file type: FILE, DIRECTORY, LINK or UNDEFINED.
// LINK is only returned if followLink=false
Type type(const bool followLink = true) const;
//- Return true if string starts with a '/'
@ -203,6 +203,12 @@ public:
//- Convert from relative to absolute
fileName& toAbsolute();
//- Return true if string ends with "~", ".bak", ".old", ".save"
static bool isBackup(const std::string& str);
//- Return true if file name ends with "~", ".bak", ".old", ".save"
inline bool isBackup() const;
// Decomposition

View File

@ -128,6 +128,12 @@ inline bool Foam::fileName::isAbsolute() const
}
inline bool Foam::fileName::isBackup() const
{
return isBackup(*this);
}
inline bool Foam::fileName::hasExt() const
{
return string::hasExt();

View File

@ -39,16 +39,14 @@ const Foam::string Foam::string::null;
Foam::word Foam::string::ext() const
{
const size_type i = find_ext();
const auto i = find_ext();
if (i == npos)
{
return word::null;
}
else
{
return substr(i+1, npos);
}
return substr(i+1, npos);
}
@ -68,7 +66,7 @@ bool Foam::string::ext(const Foam::word& ending)
bool Foam::string::hasExt(const word& ending) const
{
size_type i = find_ext();
auto i = find_ext();
if (i == npos)
{
return false;
@ -86,7 +84,7 @@ bool Foam::string::hasExt(const word& ending) const
bool Foam::string::hasExt(const wordRe& ending) const
{
const size_type i = find_ext();
const auto i = find_ext();
if (i == npos)
{
return false;

View File

@ -84,7 +84,11 @@ protected:
//- Find position of a file extension dot, return npos on failure.
// A wrapped version of find_last_of("./") with additional logic.
inline size_type find_ext() const;
inline static std::string::size_type find_ext(const std::string& str);
//- Find position of a file extension dot, return npos on failure.
// A wrapped version of find_last_of("./") with additional logic.
inline std::string::size_type find_ext() const;
//- Return file name extension (part after last .)
word ext() const;

View File

@ -26,18 +26,22 @@ License
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
inline std::string::size_type Foam::string::find_ext() const
inline std::string::size_type Foam::string::find_ext(const std::string& str)
{
const size_type i = find_last_of("./");
const auto i = str.find_last_of("./");
if (i == npos || i == 0 || operator[](i) == '/')
if (i == npos || i == 0 || str[i] == '/')
{
return npos;
}
else
{
return i;
}
return i;
}
inline std::string::size_type Foam::string::find_ext() const
{
return find_ext(*this);
}
@ -49,17 +53,15 @@ inline bool Foam::string::hasExt() const
inline bool Foam::string::removeExt()
{
const size_type i = find_ext();
const auto i = find_ext();
if (i == npos)
{
return false;
}
else
{
this->resize(i);
return true;
}
this->resize(i);
return true;
}