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 * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Functions * * * * * * * * * * * * * * //
//
//! \cond fileScope //! \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 // Like fileName "/" global operator, but retain any invalid characters
static inline Foam::fileName fileNameConcat static inline Foam::fileName fileNameConcat
@ -793,7 +764,7 @@ Foam::fileNameList Foam::readDir
else if else if
( (
(type == fileName::DIRECTORY) (type == fileName::DIRECTORY)
|| (type == fileName::FILE && !isBackupName(name)) || (type == fileName::FILE && !fileName::isBackup(name))
) )
{ {
if ((directory/name).type(followLink) == type) if ((directory/name).type(followLink) == type)

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation \\ / 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 License
This file is part of OpenFOAM. 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 * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::fileName::fileName(const UList<word>& lst) Foam::fileName::fileName(const UList<word>& lst)

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation \\ / 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 License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -83,10 +83,10 @@ public:
//- Enumerations to handle file types and modes. //- Enumerations to handle file types and modes.
enum Type enum Type
{ {
UNDEFINED, UNDEFINED, //!< Undefined file type.
FILE, FILE, //!< A file
DIRECTORY, DIRECTORY, //!< A directory
LINK LINK //!< A symlink
}; };
@ -190,8 +190,8 @@ public:
// Interrogation // Interrogation
//- Return the file type: FILE, DIRECTORY, UNDEFINED or //- Return the file type: FILE, DIRECTORY, LINK or UNDEFINED.
// LINK (only if followLink=false) // LINK is only returned if followLink=false
Type type(const bool followLink = true) const; Type type(const bool followLink = true) const;
//- Return true if string starts with a '/' //- Return true if string starts with a '/'
@ -203,6 +203,12 @@ public:
//- Convert from relative to absolute //- Convert from relative to absolute
fileName& toAbsolute(); 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 // 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 inline bool Foam::fileName::hasExt() const
{ {
return string::hasExt(); return string::hasExt();

View File

@ -39,16 +39,14 @@ const Foam::string Foam::string::null;
Foam::word Foam::string::ext() const Foam::word Foam::string::ext() const
{ {
const size_type i = find_ext(); const auto i = find_ext();
if (i == npos) if (i == npos)
{ {
return word::null; 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 bool Foam::string::hasExt(const word& ending) const
{ {
size_type i = find_ext(); auto i = find_ext();
if (i == npos) if (i == npos)
{ {
return false; return false;
@ -86,7 +84,7 @@ bool Foam::string::hasExt(const word& ending) const
bool Foam::string::hasExt(const wordRe& ending) const bool Foam::string::hasExt(const wordRe& ending) const
{ {
const size_type i = find_ext(); const auto i = find_ext();
if (i == npos) if (i == npos)
{ {
return false; return false;

View File

@ -84,7 +84,11 @@ protected:
//- Find position of a file extension dot, return npos on failure. //- Find position of a file extension dot, return npos on failure.
// A wrapped version of find_last_of("./") with additional logic. // 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 .) //- Return file name extension (part after last .)
word ext() const; word ext() const;

View File

@ -26,18 +26,22 @@ License
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * 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; 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() inline bool Foam::string::removeExt()
{ {
const size_type i = find_ext(); const auto i = find_ext();
if (i == npos) if (i == npos)
{ {
return false; return false;
} }
else
{ this->resize(i);
this->resize(i); return true;
return true;
}
} }