Implement wx{File,Dir}Exists() in terms of wxFileName methods.

Use wxFileName from the global functions instead of using global functions in
wxFileName methods as wxFileName is the preferred API for all these
operations.

Closes #11488.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62735 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2009-11-28 02:40:08 +00:00
parent ad42f414c8
commit 5bb596668f
2 changed files with 78 additions and 76 deletions

View File

@ -309,30 +309,7 @@ static inline CharType* MYcopystring(const CharType* s)
bool
wxFileExists (const wxString& filename)
{
#if defined(__WXPALMOS__)
return false;
#elif defined(__WIN32__) && !defined(__WXMICROWIN__)
// we must use GetFileAttributes() instead of the ANSI C functions because
// it can cope with network (UNC) paths unlike them
DWORD ret = ::GetFileAttributes(filename.fn_str());
return (ret != INVALID_FILE_ATTRIBUTES) && !(ret & FILE_ATTRIBUTE_DIRECTORY);
#else // !__WIN32__
#ifndef S_ISREG
#define S_ISREG(mode) ((mode) & S_IFREG)
#endif
wxStructStat st;
#ifndef wxNEED_WX_UNISTD_H
return (wxStat( filename.fn_str() , &st) == 0 && S_ISREG(st.st_mode))
#ifdef __OS2__
|| (errno == EACCES) // if access is denied something with that name
// exists and is opened in exclusive mode.
#endif
;
#else
return wxStat( filename , &st) == 0 && S_ISREG(st.st_mode);
#endif
#endif // __WIN32__/!__WIN32__
return wxFileName::FileExists(filename);
}
bool
@ -1320,54 +1297,7 @@ bool wxRmdir(const wxString& dir, int WXUNUSED(flags))
// does the path exists? (may have or not '/' or '\\' at the end)
bool wxDirExists(const wxString& pathName)
{
wxString strPath(pathName);
#if defined(__WINDOWS__) || defined(__OS2__)
// Windows fails to find directory named "c:\dir\" even if "c:\dir" exists,
// so remove all trailing backslashes from the path - but don't do this for
// the paths "d:\" (which are different from "d:") nor for just "\"
while ( wxEndsWithPathSeparator(strPath) )
{
size_t len = strPath.length();
if ( len == 1 || (len == 3 && strPath[len - 2] == wxT(':')) )
break;
strPath.Truncate(len - 1);
}
#endif // __WINDOWS__
#ifdef __OS2__
// OS/2 can't handle "d:", it wants either "d:\" or "d:."
if (strPath.length() == 2 && strPath[1u] == wxT(':'))
strPath << wxT('.');
#endif
#if defined(__WXPALMOS__)
return false;
#elif defined(__WIN32__) && !defined(__WXMICROWIN__)
// stat() can't cope with network paths
DWORD ret = ::GetFileAttributes(strPath.fn_str());
return (ret != INVALID_FILE_ATTRIBUTES) && (ret & FILE_ATTRIBUTE_DIRECTORY);
#elif defined(__OS2__)
FILESTATUS3 Info = {{0}};
APIRET rc = ::DosQueryPathInfo((PSZ)(WXSTRINGCAST strPath), FIL_STANDARD,
(void*) &Info, sizeof(FILESTATUS3));
return ((rc == NO_ERROR) && (Info.attrFile & FILE_DIRECTORY)) ||
(rc == ERROR_SHARING_VIOLATION);
// If we got a sharing violation, there must be something with this name.
#else // !__WIN32__
wxStructStat st;
#ifndef __VISAGECPP__
return wxStat(strPath.c_str(), &st) == 0 && ((st.st_mode & S_IFMT) == S_IFDIR);
#else
// S_IFMT not supported in VA compilers.. st_mode is a 2byte value only
return wxStat(strPath.c_str(), &st) == 0 && (st.st_mode == S_IFDIR);
#endif
#endif // __WIN32__/!__WIN32__
return wxFileName::DirExists(pathName);
}
#if WXWIN_COMPATIBILITY_2_8

View File

@ -571,9 +571,33 @@ bool wxFileName::FileExists() const
return wxFileName::FileExists( GetFullPath() );
}
bool wxFileName::FileExists( const wxString &file )
/* static */
bool wxFileName::FileExists( const wxString &filePath )
{
return ::wxFileExists( file );
#if defined(__WXPALMOS__)
return false;
#elif defined(__WIN32__) && !defined(__WXMICROWIN__)
// we must use GetFileAttributes() instead of the ANSI C functions because
// it can cope with network (UNC) paths unlike them
DWORD ret = ::GetFileAttributes(filePath.fn_str());
return (ret != INVALID_FILE_ATTRIBUTES) && !(ret & FILE_ATTRIBUTE_DIRECTORY);
#else // !__WIN32__
#ifndef S_ISREG
#define S_ISREG(mode) ((mode) & S_IFREG)
#endif
wxStructStat st;
#ifndef wxNEED_WX_UNISTD_H
return (wxStat( filePath.fn_str() , &st) == 0 && S_ISREG(st.st_mode))
#ifdef __OS2__
|| (errno == EACCES) // if access is denied something with that name
// exists and is opened in exclusive mode.
#endif
;
#else
return wxStat( filePath , &st) == 0 && S_ISREG(st.st_mode);
#endif
#endif // __WIN32__/!__WIN32__
}
bool wxFileName::DirExists() const
@ -581,9 +605,57 @@ bool wxFileName::DirExists() const
return wxFileName::DirExists( GetPath() );
}
bool wxFileName::DirExists( const wxString &dir )
/* static */
bool wxFileName::DirExists( const wxString &dirPath )
{
return ::wxDirExists( dir );
wxString strPath(dirPath);
#if defined(__WINDOWS__) || defined(__OS2__)
// Windows fails to find directory named "c:\dir\" even if "c:\dir" exists,
// so remove all trailing backslashes from the path - but don't do this for
// the paths "d:\" (which are different from "d:") nor for just "\"
while ( wxEndsWithPathSeparator(strPath) )
{
size_t len = strPath.length();
if ( len == 1 || (len == 3 && strPath[len - 2] == wxT(':')) )
break;
strPath.Truncate(len - 1);
}
#endif // __WINDOWS__
#ifdef __OS2__
// OS/2 can't handle "d:", it wants either "d:\" or "d:."
if (strPath.length() == 2 && strPath[1u] == wxT(':'))
strPath << wxT('.');
#endif
#if defined(__WXPALMOS__)
return false;
#elif defined(__WIN32__) && !defined(__WXMICROWIN__)
// stat() can't cope with network paths
DWORD ret = ::GetFileAttributes(strPath.fn_str());
return (ret != INVALID_FILE_ATTRIBUTES) && (ret & FILE_ATTRIBUTE_DIRECTORY);
#elif defined(__OS2__)
FILESTATUS3 Info = {{0}};
APIRET rc = ::DosQueryPathInfo((PSZ)(WXSTRINGCAST strPath), FIL_STANDARD,
(void*) &Info, sizeof(FILESTATUS3));
return ((rc == NO_ERROR) && (Info.attrFile & FILE_DIRECTORY)) ||
(rc == ERROR_SHARING_VIOLATION);
// If we got a sharing violation, there must be something with this name.
#else // !__WIN32__
wxStructStat st;
#ifndef __VISAGECPP__
return wxStat(strPath.c_str(), &st) == 0 && ((st.st_mode & S_IFMT) == S_IFDIR);
#else
// S_IFMT not supported in VA compilers.. st_mode is a 2byte value only
return wxStat(strPath.c_str(), &st) == 0 && (st.st_mode == S_IFDIR);
#endif
#endif // __WIN32__/!__WIN32__
}
// ----------------------------------------------------------------------------