diff --git a/dtool/src/dtoolutil/filename.cxx b/dtool/src/dtoolutil/filename.cxx index 40e19be38e..319e5719e0 100644 --- a/dtool/src/dtoolutil/filename.cxx +++ b/dtool/src/dtoolutil/filename.cxx @@ -1204,6 +1204,17 @@ open_write(ofstream &stream) const { int open_mode = ios::out; +#ifdef WIN32_VC + // Windows insists on having this set to prevent the file from being + // truncated when we open it. Makes ios::trunc kind of pointless, + // doesn't it? On the other hand, setting ios::in also seems to + // imply ios::nocreate (!), so we should only set this if the file + // already exists. + if (exists()) { + open_mode |= ios::in; + } +#endif + #ifdef HAVE_IOS_BINARY // For some reason, some systems (like Irix) don't define // ios::binary.