//---------------------------------------------------------------------------- // EgalTech 2013-2013 //---------------------------------------------------------------------------- // File : FileUtils.cpp Data : 11.12.13 Versione : 1.4a5 // Contenuto : Funzioni di utilità sui file. // // // // Modifiche : 11.12.13 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "\EgtDev\Include\EGnFileUtils.h" #include "\EgtDev\Include\EGnStringUtils.h" #include "\EgtDev\Include\EGtStringConverter.h" #include using namespace std ; //---------------------------------------------------------------------------- bool ExistsFile( const string& sFile) { // leggo gli attributi del file DWORD dwAttr = ::GetFileAttributesW( stringtoW( sFile)) ; // se non esiste if ( dwAttr == INVALID_FILE_ATTRIBUTES || dwAttr == INVALID_FILE_SIZE) return false ; // se è un direttorio if ( dwAttr & FILE_ATTRIBUTE_DIRECTORY) return false ; return true ; } //----------------------------------------------------------------------------- bool CopyFileEgt( const string& sFile, const string& sNewFile) { return ( ::CopyFileW( stringtoW( sFile), stringtoW( sNewFile), false) != 0) ; } //----------------------------------------------------------------------------- bool RenameFile( const string& sFile, const string& sNewFile) { return ( ::MoveFileW( stringtoW( sFile), stringtoW( sNewFile)) != 0) ; } //----------------------------------------------------------------------------- bool EraseFile( const string& sFile) { return ( ::DeleteFileW( stringtoW( sFile)) != 0) ; } //----------------------------------------------------------------------------- string ChangeFileExtension( const string& sFile, const string& sNewExt) { // separo l'estensione dal resto string sFileTitle ; string sFileExt ; SplitLast( sFile, ".", sFileTitle, sFileExt) ; if ( sFileExt.find_first_of( "/\\") != string::npos) { sFileTitle = sFile ; sFileExt = "" ; } // genero il nome con la nuova estensione if ( sNewExt[0] == '.') return ( sFileTitle + sNewExt) ; else return ( sFileTitle + "." + sNewExt) ; } //----------------------------------------------------------------------------- bool FileExtensionMatches( const string& sFile, const string& sExt) { // separo l'estensione dal resto string sFileTitle ; string sFileExt ; SplitLast( sFile, ".", sFileTitle, sFileExt) ; if ( sFileExt.find_first_of( "/\\") != string::npos) { sFileTitle = sFile ; sFileExt = "" ; } // confronto return ( EqualNoCase( sFileExt, sExt)) ; } //----------------------------------------------------------------------------- bool FindFirstFileEgt( const string& sFileSpec, string& sFileName) { wstring sFileSpecW ; wstring sFileW ; _wfinddata_t c_file ; intptr_t hFile ; sFileSpecW = stringtoW( sFileSpec) ; // cerco il primo file che soddisfa le specifiche if ( ( hFile = _wfindfirst( sFileSpecW.c_str(), &c_file)) != -1L) { do { if ( c_file.attrib != _A_SUBDIR) { sFileName = LPSTR( WtoA( c_file.name)) ; _findclose( hFile) ; errno = 0 ; return true ; } } while( _wfindnext( hFile, &c_file) == 0) ; _findclose( hFile) ; errno = 0 ; } return false ; } //---------------------------------------------------------------------------- bool ExistsDirectory( const string& sDir) { // leggo gli attributi del direttorio DWORD dwAttr = ::GetFileAttributesW( stringtoW( sDir)) ; // se non esiste if ( dwAttr == INVALID_FILE_ATTRIBUTES) return false ; // se è un direttorio return ( (dwAttr & FILE_ATTRIBUTE_DIRECTORY) != 0) ; } //----------------------------------------------------------------------------- bool EmptyDirectory( const string& sDir) { wstring sDirW ; wstring sFileW ; _wfinddata_t c_file ; intptr_t hFile ; sDirW = stringtoW( sDir) ; sFileW = sDirW + L"\\*.*" ; // ciclo su tutti i file del direttorio if ( ( hFile = _wfindfirst( sFileW.c_str(), &c_file)) != -1L) { do { if ( c_file.attrib != _A_SUBDIR) { sFileW = sDirW + L"\\" + c_file.name ; ::DeleteFileW( sFileW.c_str()) ; } } while( _wfindnext( hFile, &c_file) == 0) ; _findclose( hFile) ; errno = 0 ; } return true ; }