diff --git a/src/output/GnuplotWriter.cpp b/src/output/GnuplotWriter.cpp
index 991ec74537fffaaa2bef855f5c4af88f7acfa03f..9e73b449adc517ba80379b413a606f4ef71b807a 100644
--- a/src/output/GnuplotWriter.cpp
+++ b/src/output/GnuplotWriter.cpp
@@ -294,6 +294,8 @@ GnuplotWriter::_write(const MeshType& mesh,
       item_data_variant);
   }
 
+  createDirectoryIfNeeded(m_base_filename);
+
   for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
     if (i_rank == parallel::rank()) {
       std::ofstream fout(_getFilename(), std::ios_base::app);
diff --git a/src/output/GnuplotWriter1D.cpp b/src/output/GnuplotWriter1D.cpp
index 84e8aa080c6802eb546a4d0183fb446201e31ac8..f5d6dd7b2c0cd35696b21457194f72c3a4289c9a 100644
--- a/src/output/GnuplotWriter1D.cpp
+++ b/src/output/GnuplotWriter1D.cpp
@@ -323,6 +323,8 @@ GnuplotWriter1D::_write(const MeshType& mesh,
 
   std::ofstream fout;
 
+  createDirectoryIfNeeded(m_base_filename);
+
   if (parallel::rank() == 0) {
     fout.open(_getFilename());
     if (not fout) {