- // we want to create the file in the same directory as strName because
- // otherwise rename() in Commit() might not work (if the files are on
- // different partitions for example). Unfortunately, the only standard
- // (POSIX) temp file creation function tmpnam() can't do it.
-#if defined(__UNIX__) || defined(__WXSTUBS__)|| defined( __WXMAC__ )
- static const wxChar *szMktempSuffix = _T("XXXXXX");
- m_strTemp << strName << szMktempSuffix;
- mktemp(MBSTRINGCAST m_strTemp.mb_str()); // will do because length doesn't change
-#else // Windows
- wxString strPath;
- wxSplitPath(strName, &strPath, NULL, NULL);
- if ( strPath.IsEmpty() )
- strPath = _T('.'); // GetTempFileName will fail if we give it empty string
-#ifdef __WIN32__
- if ( !GetTempFileName(strPath, _T("wx_"),0, m_strTemp.GetWriteBuf(MAX_PATH)) )
-#else
- // Not sure why MSVC++ 1.5 header defines first param as BYTE - bug?
- if ( !GetTempFileName((BYTE) (const wxChar*) strPath, _T("wx_"),0, m_strTemp.GetWriteBuf(MAX_PATH)) )
-#endif
- wxLogLastError(_T("GetTempFileName"));
- m_strTemp.UngetWriteBuf();
-#endif // Windows/Unix
+ m_strTemp = wxFileName::CreateTempFileName(strName);
+
+ if ( m_strTemp.empty() )
+ {
+ // CreateTempFileName() failed
+ return FALSE;
+ }
+
+ // actually open the file now (it must already exist)
+ if ( !m_file.Open(m_strTemp, wxFile::write) )
+ {
+ // opening existing file failed?
+ return FALSE;
+ }