Skip to content

Commit 1b5b053

Browse files
franzpoeschelPöschel
authored andcommitted
Windows Workaround: Fallback to Create mode
1 parent f5e511f commit 1b5b053

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

src/IO/ADIOS/ADIOS2IOHandler.cpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2538,17 +2538,42 @@ namespace detail
25382538
{
25392539
if (!m_engine)
25402540
{
2541+
auto tempMode = m_mode;
25412542
switch (m_mode)
25422543
{
25432544
case adios2::Mode::Append:
2545+
#ifdef _WIN32
2546+
/*
2547+
* On Windows, ADIOS2 Append mode only works with existing files.
2548+
* So, we first check for file existence and switch to create mode
2549+
* if it does not exist.
2550+
*/
2551+
{
2552+
try
2553+
{
2554+
adios2::Engine checkExists = m_IO.Open(m_file, adios2::Mode::Read);
2555+
if(!checkExists)
2556+
{
2557+
tempMode = adios2::Mode::Write;
2558+
} else
2559+
{
2560+
checkExists.Close();
2561+
}
2562+
} catch(...)
2563+
{
2564+
tempMode = adios2::Mode::Write;
2565+
}
2566+
}
2567+
[[fallthrough]];
2568+
#endif
25442569
case adios2::Mode::Write: {
25452570
// usesSteps attribute only written upon ::advance()
25462571
// this makes sure that the attribute is only put in case
25472572
// the streaming API was used.
25482573
m_IO.DefineAttribute<ADIOS2Schema::schema_t>(
25492574
ADIOS2Defaults::str_adios2Schema, m_impl->m_schema);
25502575
m_engine = std::make_optional(
2551-
adios2::Engine(m_IO.Open(m_file, m_mode)));
2576+
adios2::Engine(m_IO.Open(m_file, tempMode)));
25522577
break;
25532578
}
25542579
case adios2::Mode::Read: {

0 commit comments

Comments
 (0)