X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHUtils%2FSMESH_File.cxx;h=9e3d7526314af709832941d0e16a57fcb838943e;hp=10c1f533f1d4a238613f739a18aa51a1233d453c;hb=d9f4b53e489dd5857db264ede6acded7b076c9f1;hpb=59627b07d70f4caa4c768be6805334d2610fa54c diff --git a/src/SMESHUtils/SMESH_File.cxx b/src/SMESHUtils/SMESH_File.cxx index 10c1f533f..9e3d75263 100644 --- a/src/SMESHUtils/SMESH_File.cxx +++ b/src/SMESHUtils/SMESH_File.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2022 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -36,6 +36,8 @@ #include +#include + namespace boofs = boost::filesystem; //================================================================================ @@ -75,11 +77,17 @@ SMESH_File::~SMESH_File() bool SMESH_File::open() { - int length = size(); + long length = size(); if ( !_map && length > 0 ) { #ifdef WIN32 - _file = CreateFile(_name.data(), GENERIC_READ, FILE_SHARE_READ, +# ifdef UNICODE + std::wstring aName = Kernel_Utils::utf8_decode_s(_name); + const wchar_t* name = aName.c_str(); +# else + char* name = _name.data(); +# endif + _file = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); bool ok = ( _file != INVALID_HANDLE_VALUE ); #else @@ -168,7 +176,12 @@ bool SMESH_File::remove() close(); boost::system::error_code err; +#if defined(WIN32) && defined(UNICODE) + std::wstring name = Kernel_Utils::utf8_decode_s(_name); + boofs::remove(name.c_str(), err); +#else boofs::remove( _name, err ); +#endif _error = err.message(); return !err; @@ -185,10 +198,15 @@ long SMESH_File::size() if ( _size >= 0 ) return _size; // size of an open file boost::system::error_code err; +#if defined(WIN32) && defined(UNICODE) + std::wstring name = Kernel_Utils::utf8_decode_s(_name); + boost::uintmax_t size = boofs::file_size(name.c_str(), err); +#else boost::uintmax_t size = boofs::file_size( _name, err ); +#endif _error = err.message(); - return err ? -1 : (long) size; + return !err ? (long) size : -1; } //================================================================================ @@ -200,7 +218,13 @@ long SMESH_File::size() bool SMESH_File::exists() { boost::system::error_code err; - bool res = boofs::exists( _name, err ); +#if defined(WIN32) && defined(UNICODE) + std::wstring name = Kernel_Utils::utf8_decode_s(_name); + bool res = boofs::exists(name.c_str(), err); +#else + bool res = boofs::exists(_name, err); +#endif + _error = err.message(); return err ? false : res; @@ -215,7 +239,12 @@ bool SMESH_File::exists() bool SMESH_File::isDirectory() { boost::system::error_code err; +#if defined(WIN32) && defined(UNICODE) + std::wstring name = Kernel_Utils::utf8_decode_s(_name); + bool res = boofs::is_directory(name.c_str(), err); +#else bool res = boofs::is_directory( _name, err ); +#endif _error = err.message(); return err ? false : res; @@ -290,9 +319,16 @@ bool SMESH_File::getInts(std::vector& ints) bool SMESH_File::openForWriting() { -#ifdef WIN32 + close(); - _file = CreateFile( _name.c_str(), // name of the write +#ifdef WIN32 +#ifdef UNICODE + std::wstring aName = Kernel_Utils::utf8_decode_s(_name); + const wchar_t* name = aName.c_str(); +#else + char* name = _name.data(); +#endif + _file = CreateFile( name, // name of the write GENERIC_WRITE, // open for writing 0, // do not share NULL, // default security @@ -300,7 +336,6 @@ bool SMESH_File::openForWriting() FILE_ATTRIBUTE_NORMAL, // normal file NULL); // no attr. template return ( _file != INVALID_HANDLE_VALUE ); - #else _file = ::open( _name.c_str(),