X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FTOOLSDS%2FSALOMEDS_Tool.cxx;h=2b61d3fddcb726106b06b87a1c5049cdbd34e6a6;hb=d8edd4804d9e6513a17c497c1a30326d4ba0d677;hp=99101b3a88ece879176af73a7a9dba7ea3923475;hpb=9a965a48d4bc1a6cd1f73229a91e77b10bffa881;p=modules%2Fkernel.git diff --git a/src/TOOLSDS/SALOMEDS_Tool.cxx b/src/TOOLSDS/SALOMEDS_Tool.cxx index 99101b3a8..2b61d3fdd 100644 --- a/src/TOOLSDS/SALOMEDS_Tool.cxx +++ b/src/TOOLSDS/SALOMEDS_Tool.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -30,6 +30,7 @@ #include "utilities.h" #include "Basics_DirUtils.hxx" +#include "Basics_Utils.hxx" #ifndef WIN32 #include @@ -44,24 +45,13 @@ #include #include -#include #include #include CORBA_SERVER_HEADER(SALOMEDS_Attributes) bool Exists(const std::string thePath) { -#ifdef WIN32 - if ( GetFileAttributes ( thePath.c_str() ) == 0xFFFFFFFF ) { - if ( GetLastError () == ERROR_FILE_NOT_FOUND ) { - return false; - } - } -#else - int status = access ( thePath.c_str() , F_OK ); - if (status != 0) return false; -#endif - return true; + return Kernel_Utils::IsExists(thePath); } @@ -132,19 +122,24 @@ std::string SALOMEDS_Tool::GetTmpDir() // purpose : Removes files listed in theFileList //============================================================================ void SALOMEDS_Tool::RemoveTemporaryFiles(const std::string& theDirectory, - const SALOMEDS::ListOfFileNames& theFiles, + const ListOfFiles& theFiles, const bool IsDirDeleted) { std::string aDirName = theDirectory; - int i, aLength = theFiles.length(); + size_t i, aLength = theFiles.size(); for(i=1; i<=aLength; i++) { std::string aFile(aDirName); aFile += theFiles[i-1]; if(!Exists(aFile)) continue; #ifdef WIN32 - DeleteFile(aFile.c_str()); +#if defined(UNICODE) + std::wstring aFileToDelete = Kernel_Utils::utf8_decode_s(aFile); +#else + std::string aFileToDelete = aFile; +#endif + DeleteFile(aFileToDelete.c_str()); #else unlink(aFile.c_str()); #endif @@ -153,7 +148,12 @@ void SALOMEDS_Tool::RemoveTemporaryFiles(const std::string& theDirectory, if(IsDirDeleted) { if(Exists(aDirName)) { #ifdef WIN32 - RemoveDirectory(aDirName.c_str()); +#if defined(UNICODE) + std::wstring aDirToDelete = Kernel_Utils::utf8_decode_s(aDirName); +#else + std::string aDirToDelete = aDirName; +#endif + RemoveDirectory(aDirToDelete.c_str()); #else rmdir(aDirName.c_str()); #endif @@ -170,11 +170,11 @@ namespace { SALOMEDS::TMPFile* PutFilesToStream(const std::string& theFromDirectory, - const SALOMEDS::ListOfFileNames& theFiles, - const SALOMEDS::ListOfFileNames& theFileNames, + const std::vector& theFiles, + const std::vector& theFileNames, const int theNamesOnly) { - int i, aLength = theFiles.length(); + int i, aLength = (int)theFiles.size(); //!< TODO: conversion from size_t to int if(aLength == 0) return (new SALOMEDS::TMPFile); @@ -195,18 +195,22 @@ namespace //Check if the file exists if (!theNamesOnly) { // mpv 15.01.2003: if only file names must be stroed, then size of files is zero - std::string aFullPath = aTmpDir + const_cast(theFiles[i].in()); + std::string aFullPath = aTmpDir + theFiles[i]; if(!Exists(aFullPath)) continue; #ifdef WIN32 +#ifdef UNICODE + std::ifstream aFile(Kernel_Utils::utf8_decode_s(aFullPath).c_str(), std::ios::binary); +#else std::ifstream aFile(aFullPath.c_str(), std::ios::binary); +#endif #else std::ifstream aFile(aFullPath.c_str()); #endif aFile.seekg(0, std::ios::end); - aFileSize[i] = aFile.tellg(); + aFileSize[i] = (long)aFile.tellg(); //!< TODO: conversion from std::streamoff to long aBufferSize += aFileSize[i]; //Add a space to store the file } - aFileNameSize[i] = strlen(theFileNames[i])+1; + aFileNameSize[i] = (int)theFileNames[i].length()+1; //!< TODO: conversion from size_t to int aBufferSize += aFileNameSize[i]; //Add a space to store the file name aBufferSize += (theNamesOnly)?4:12; //Add 4 bytes: a length of the file name, // 8 bytes: length of the file itself @@ -215,7 +219,8 @@ namespace if ( aNbFiles == 0 ) return (new SALOMEDS::TMPFile); aBufferSize += 4; //4 bytes for a number of the files that will be written to the stream; - unsigned char* aBuffer = new unsigned char[aBufferSize]; + unsigned char* aBuffer = new unsigned char[aBufferSize]; + if(aBuffer == NULL) return (new SALOMEDS::TMPFile); @@ -228,12 +233,16 @@ namespace aCurrentPos = 4; for(i=0; i(theFiles[i].in()); + std::string aFullPath = aTmpDir + theFiles[i]; if(!Exists(aFullPath)) continue; #ifdef WIN32 +#ifdef UNICODE + aFile = new std::ifstream (Kernel_Utils::utf8_decode_s(aFullPath).c_str(), std::ios::binary); +#else aFile = new std::ifstream(aFullPath.c_str(), std::ios::binary); +#endif #else aFile = new std::ifstream(aFullPath.c_str()); #endif @@ -245,7 +254,7 @@ namespace aCurrentPos += 4; //Copy the file name to the buffer - memcpy((aBuffer + aCurrentPos), theFileNames[i], aFileNameSize[i]); + memcpy((aBuffer + aCurrentPos), theFileNames[i].c_str(), aFileNameSize[i]); aCurrentPos += aFileNameSize[i]; if (!theNamesOnly) { // mpv 15.01.2003: we don't copy file content to the buffer if !theNamesOnly @@ -256,7 +265,7 @@ namespace aCurrentPos += 8; aFile->seekg(0, std::ios::beg); - aFile->read((char *)(aBuffer + aCurrentPos), aFileSize[i]); + aFile->read((char *)(aBuffer + aCurrentPos), aFileSize[i]); aFile->close(); delete(aFile); aCurrentPos += aFileSize[i]; @@ -277,17 +286,17 @@ namespace SALOMEDS::TMPFile* SALOMEDS_Tool::PutFilesToStream(const std::string& theFromDirectory, - const SALOMEDS::ListOfFileNames& theFiles, + const ListOfFiles& theFiles, const int theNamesOnly) { - SALOMEDS::ListOfFileNames aFileNames(theFiles); + ListOfFiles aFileNames(theFiles); return ::PutFilesToStream(theFromDirectory,theFiles,aFileNames,theNamesOnly); } SALOMEDS::TMPFile* -SALOMEDS_Tool::PutFilesToStream(const SALOMEDS::ListOfFileNames& theFiles, - const SALOMEDS::ListOfFileNames& theFileNames) +SALOMEDS_Tool::PutFilesToStream(const ListOfFiles& theFiles, + const ListOfFiles& theFileNames) { return ::PutFilesToStream("",theFiles,theFileNames,0); } @@ -296,19 +305,18 @@ SALOMEDS_Tool::PutFilesToStream(const SALOMEDS::ListOfFileNames& theFiles, // function : PutStreamToFile // purpose : converts the stream "theStream" to the files //============================================================================ -SALOMEDS::ListOfFileNames_var +SALOMEDS_Tool::ListOfFiles SALOMEDS_Tool::PutStreamToFiles(const SALOMEDS::TMPFile& theStream, const std::string& theToDirectory, const int theNamesOnly) { - SALOMEDS::ListOfFileNames_var aFiles = new SALOMEDS::ListOfFileNames; + ListOfFiles aFiles; if(theStream.length() == 0) return aFiles; //Get a temporary directory for saving a file std::string aTmpDir = theToDirectory; - unsigned char *aBuffer = (unsigned char*)theStream.NP_data(); if(aBuffer == NULL) @@ -320,7 +328,7 @@ SALOMEDS_Tool::PutStreamToFiles(const SALOMEDS::TMPFile& theStream, //Copy the number of files in the stream memcpy(&aNbFiles, aBuffer, sizeof(int)); - aFiles->length(aNbFiles); + aFiles.reserve(aNbFiles); for(i=0; i 0) { + size_t pos = aPath.rfind('/'); + if(pos != std::string::npos) { aPath = aPath.substr(pos+1, aPath.size()); isFound = true; } if(!isFound) { pos = aPath.rfind('\\'); - if(pos > 0) { + if(pos != std::string::npos) { aPath = aPath.substr(pos+1, aPath.size()); isFound = true; } } if(!isFound) { pos = aPath.rfind('|'); - if(pos > 0) aPath = aPath.substr(pos+1, aPath.size()); + if(pos != std::string::npos) aPath = aPath.substr(pos+1, aPath.size()); } pos = aPath.rfind('.'); - if(pos > 0) aPath = aPath.substr(0, pos); //Remove extension + if(pos != std::string::npos) aPath = aPath.substr(0, pos); //Remove extension return aPath; } @@ -400,18 +412,18 @@ std::string SALOMEDS_Tool::GetNameFromPath(const std::string& thePath) { std::string SALOMEDS_Tool::GetDirFromPath(const std::string& thePath) { if (thePath.empty()) return ""; - int pos = thePath.rfind('/'); + size_t pos = thePath.rfind('/'); std::string path; - if(pos > 0) { + if(pos != std::string::npos) { path = thePath.substr(0, pos+1); } if(path.empty()) { pos = thePath.rfind('\\'); - if(pos > 0) path = thePath.substr(0, pos+1); + if(pos != std::string::npos) path = thePath.substr(0, pos+1); } if(path.empty()) { pos = thePath.rfind('|'); - if(pos > 0) path = thePath.substr(0, pos+1); + if(pos != std::string::npos) path = thePath.substr(0, pos+1); } if(path.empty()) { path = thePath+"/"; @@ -421,7 +433,7 @@ std::string SALOMEDS_Tool::GetDirFromPath(const std::string& thePath) { if(path.size() == 2 && path[1] == ':') path +='\\'; #endif - for(int i = 0, len = path.size(); i