From: Vadim Zeitlin Date: Wed, 15 Feb 2012 15:39:46 +0000 (+0000) Subject: Added wxFileName::Exists(). X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/996d3fe3f80a5954439d6a57c858ac43d2576cf2 Added wxFileName::Exists(). This function checks for existence of anything with the given name, not necessarily just a file or a directory. Extend the unit test to verify that it returns true for /dev/null on Unix systems. Closes #953. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70600 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index 8854459475..b6ab33c597 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -467,6 +467,7 @@ All: - Add wxHTTP::SetPostBuffer(wxMemoryBuffer) and SetPostText() (Eran Ifrah). - Fix wrong time zone used in wxDateTime::UNow(). - Fix performance of wxStdInputStream with MSVC8/9 (wsu). +- Added wxFileName::Exists(). All (GUI): diff --git a/include/wx/filename.h b/include/wx/filename.h index 8f9de3bb3a..dc8eb3020d 100644 --- a/include/wx/filename.h +++ b/include/wx/filename.h @@ -214,14 +214,20 @@ public: !m_ext.empty() || m_hasExt; } - // does the file with this name exists? + // does the file with this name exist? bool FileExists() const; static bool FileExists( const wxString &file ); - // does the directory with this name exists? + // does the directory with this name exist? bool DirExists() const; static bool DirExists( const wxString &dir ); + // does anything at all with this name (i.e. file, directory or some + // other file system object such as a device, socket, ...) exist? + bool Exists() const { return Exists(GetFullPath()); } + static bool Exists(const wxString& path); + + // checks on most common flags for files/directories; // more platform-specific features (like e.g. Unix permissions) are not // available in wxFileName diff --git a/interface/wx/filename.h b/interface/wx/filename.h index 829fa8b0c5..8854f1f062 100644 --- a/interface/wx/filename.h +++ b/interface/wx/filename.h @@ -452,11 +452,19 @@ public: /** Returns @true if the directory with this name exists. + + Notice that this function tests the directory part of this object, + i.e. the string returned by GetPath(), and not the full path returned + by GetFullPath(). + + @see FileExists(), Exists() */ bool DirExists() const; /** Returns @true if the directory with name @a dir exists. + + @see FileExists(), Exists() */ static bool DirExists(const wxString& dir); @@ -467,17 +475,40 @@ public: static wxFileName DirName(const wxString& dir, wxPathFormat format = wxPATH_NATIVE); + /** + Calls the static overload of this function with the full path of this + object. + + @since 2.9.4 + */ + bool Exists() const; + + /** + Returns @true if either a file or a directory or something else with + this name exists in the file system. + + This method is equivalent to @code FileExists() || DirExists() @endcode + under most systems but under Unix it also returns true if the file + identifies a special file system object such as a device, a socket or a + FIFO. + + @since 2.9.4 + + @see FileExists(), DirExists() + */ + static bool Exists(const wxString& path); + /** Returns @true if the file with this name exists. - @see DirExists() + @see DirExists(), Exists() */ bool FileExists() const; /** Returns @true if the file with name @a file exists. - @see DirExists() + @see DirExists(), Exists() */ static bool FileExists(const wxString& file); diff --git a/src/common/filename.cpp b/src/common/filename.cpp index 29cf9acb3a..a3f8ac3c5d 100644 --- a/src/common/filename.cpp +++ b/src/common/filename.cpp @@ -732,6 +732,12 @@ bool wxFileName::DirExists( const wxString &dirPath ) return wxFileSystemObjectExists(dirPath, wxFileSystemObject_Dir); } +/* static */ +bool wxFileName::Exists(const wxString& path) +{ + return wxFileSystemObjectExists(path, wxFileSystemObject_Any); +} + // ---------------------------------------------------------------------------- // CWD and HOME stuff // ---------------------------------------------------------------------------- diff --git a/tests/filename/filenametest.cpp b/tests/filename/filenametest.cpp index 52cad019e5..b46ecff63a 100644 --- a/tests/filename/filenametest.cpp +++ b/tests/filename/filenametest.cpp @@ -657,13 +657,16 @@ void FileNameTestCase::TestExists() CPPUNIT_ASSERT( fn.FileExists() ); CPPUNIT_ASSERT( !wxFileName::DirExists(fn.GetFullPath()) ); + CPPUNIT_ASSERT( fn.Exists() ); wxFileName dirTemp(wxFileName::DirName(wxFileName::GetTempDir())); CPPUNIT_ASSERT( !dirTemp.FileExists() ); CPPUNIT_ASSERT( dirTemp.DirExists() ); + CPPUNIT_ASSERT( dirTemp.Exists() ); #ifdef __UNIX__ CPPUNIT_ASSERT( !wxFileName::FileExists("/dev/null") ); CPPUNIT_ASSERT( !wxFileName::DirExists("/dev/null") ); + CPPUNIT_ASSERT( wxFileName::Exists("/dev/null") ); #endif // __UNIX__ }