From b59e8e22a75c8cd575fd8fa8eaa073c0cb0fcd2e Mon Sep 17 00:00:00 2001 From: Stinkfist0 Date: Mon, 28 Mar 2016 11:47:02 +0300 Subject: [PATCH 1/2] IfcConvert: Show an error msg if renaming from temp to final file fails. --- src/ifcconvert/IfcConvert.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp index 8f77d82ce3..7aa88a2edd 100644 --- a/src/ifcconvert/IfcConvert.cpp +++ b/src/ifcconvert/IfcConvert.cpp @@ -514,7 +514,12 @@ int main(int argc, char** argv) { delete serializer; - rename_file(output_temp_filename, output_filename); + // Renaming might fail (e.g. maybe the existing file was open in a viewer application) + // Do not remove the temp file as user can salvage the conversion result from it. + bool successful = rename_file(output_temp_filename, output_filename); + if (!successful) { + Logger::Message(Logger::LOG_ERROR, "Unable to write output file '" + output_filename + ""); + } if (output_extension == ".obj") { std::string mtl_filename = change_extension(output_filename, "mtl"); @@ -531,7 +536,7 @@ int main(int argc, char** argv) { else printf("\nConversion took %d minute(s) %d seconds\n", seconds/60, seconds%60); // TODO Logger::Message(Logger::LOG_NOTICE, ...); - return 0; + return successful ? 0 : 1; } void write_log() { From d7f990d8bdbb67aef8b8ae023596660538848bdf Mon Sep 17 00:00:00 2001 From: Stinkfist0 Date: Mon, 28 Mar 2016 11:32:29 +0300 Subject: [PATCH 2/2] IfcConvert: Do not use temp file for MTL as it's such a small file. Fixes #55. --- src/ifcconvert/IfcConvert.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp index 7aa88a2edd..cdb996e25a 100644 --- a/src/ifcconvert/IfcConvert.cpp +++ b/src/ifcconvert/IfcConvert.cpp @@ -378,12 +378,13 @@ int main(int argc, char** argv) { GeometrySerializer* serializer; if (output_extension == ".obj") { - const std::string mtl_temp_filename = change_extension(output_filename, "mtl") + TEMP_FILE_EXTENSION; + // Do not use temp file for MTL as it's such a small file. + const std::string mtl_filename = change_extension(output_filename, "mtl"); if (!use_world_coords) { Logger::Message(Logger::LOG_NOTICE, "Using world coords when writing WaveFront OBJ files"); settings.set(IfcGeom::IteratorSettings::USE_WORLD_COORDS, true); } - serializer = new WaveFrontOBJSerializer(output_temp_filename, mtl_temp_filename, settings); + serializer = new WaveFrontOBJSerializer(output_temp_filename, mtl_filename, settings); #ifdef WITH_OPENCOLLADA } else if (output_extension == ".dae") { serializer = new ColladaSerializer(output_temp_filename, settings); @@ -521,12 +522,6 @@ int main(int argc, char** argv) { Logger::Message(Logger::LOG_ERROR, "Unable to write output file '" + output_filename + ""); } - if (output_extension == ".obj") { - std::string mtl_filename = change_extension(output_filename, "mtl"); - std::string mtl_tmp_filename = mtl_filename + TEMP_FILE_EXTENSION; - rename_file(mtl_tmp_filename, mtl_filename); - } - write_log(); time(&end);