diff --git a/BaseLib/FileTools.h b/BaseLib/FileTools.h
index b85c56e9c24abb36fce142971f651ec56896e95b..90864ecb8562aa5fc8eb75354352ff1a4bcf2aed 100644
--- a/BaseLib/FileTools.h
+++ b/BaseLib/FileTools.h
@@ -17,6 +17,10 @@
 
 #include <fstream>
 #include <string>
+#include <vector>
+
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
 
 namespace BaseLib
 {
@@ -66,6 +70,35 @@ T readBinaryValue(std::istream& in)
 	return v;
 }
 
+template <typename T>
+std::vector<T> readBinaryArray(std::string const& filename, std::size_t const n)
+{
+	std::ifstream in(filename.c_str());
+	if (!in) {
+		ERR("readBinaryArray(): Error while reading from file \"%s\".", filename.c_str());
+		ERR("Could not open file \"%s\" for input.", filename.c_str());
+		in.close();
+		return std::vector<T>();
+	}
+
+	std::vector<T> result;
+	result.reserve(n);
+
+	for (std::size_t p = 0; in && !in.eof() && p < n; ++p)
+		result.push_back(BaseLib::readBinaryValue<T>(in));
+
+	if (result.size() == n)
+		return result;
+
+	ERR("readBinaryArray(): Error while reading from file \"%s\".", filename.c_str());
+	ERR("Read different number of values. Expected %d, got %d.", n, result.size());
+
+	if (!in.eof())
+		ERR("EOF reached.\n");
+
+	return std::vector<T>();
+}
+
 /**
  * \brief truncate a file
  *