bool ParameterAsBoolean ( const DataVect& parameters, const FMX_UInt32 which, const bool default_value ) { try { return parameters.AtAsBoolean ( which ); } catch ( exception& e ) { return default_value; } }
FMX_PROC(errcode) BE_WriteTextToFile ( short /* funcId */, const ExprEnv& /* environment */, const DataVect& data_vect, Data& results) { errcode error_result = kNoError; try { WStringAutoPtr file = ParameterAsWideString ( data_vect, 0 ); basic_path<wstring, wpath_traits> path = *file; // should the text be appended to the file or replace any existing contents ios_base::openmode mode = ios_base::trunc; if ( data_vect.Size() == 3 ) { bool append = data_vect.AtAsBoolean ( 2 ); if ( append ) { mode = ios_base::app; } } StringAutoPtr text_to_write = ParameterAsUTF8String ( data_vect, 1 ); try { basic_path<wstring, wpath_traits> filesystem_path ( path ); boost::filesystem::ofstream output_file ( filesystem_path, ios_base::out | mode ); output_file.exceptions ( boost::filesystem::ofstream::badbit | boost::filesystem::ofstream::failbit ); output_file << *text_to_write; output_file.close(); } catch ( basic_filesystem_error<wpath> e ) { error_result = e.code().value(); } catch ( exception e ) { error_result = errno; // unable to write to the file } SetNumericResult ( error_result, results ); } catch ( bad_alloc e ) { error_result = kLowMemoryError; } catch ( exception e ) { error_result = kErrorUnknown; } return error_result; } // BE_WriteTextToFile