bool wxGxFile::Move(const CPLString &szDestPath, ITrackCancel* const pTrackCancel) { if(pTrackCancel) pTrackCancel->PutMessage(wxString(_("Move file ")) + m_sName, -1, enumGISMessageInfo); CPLString szFileName = CPLGetBasename(m_sPath); CPLString szNewDestFileName = GetUniqPath(m_sPath, szDestPath, szFileName); return MoveFile(m_sPath, szNewDestFileName, pTrackCancel); }
bool wxGISDataset::Move(const CPLString &szDestPath, ITrackCancel* const pTrackCancel) { wxCriticalSectionLocker locker(m_CritSect); Close(); char** papszFileList = GetFileList(); papszFileList = CSLAddString( papszFileList, m_sPath ); if(!papszFileList) { if(pTrackCancel) pTrackCancel->PutMessage(_("No files to move"), wxNOT_FOUND, enumGISMessageErr); return false; } CPLString szFileName = CPLGetBasename(GetUniqPath(m_sPath, szDestPath, CPLGetBasename(m_sPath))); char** papszMovedFileList = NULL; for(int i = 0; papszFileList[i] != NULL; ++i ) { CPLString szNewDestFileName(CPLFormFilename(szDestPath, szFileName, GetExtension(papszFileList[i], szFileName))); papszMovedFileList = CSLAddString(papszMovedFileList, szNewDestFileName); if(!MoveFile(szNewDestFileName, papszFileList[i], pTrackCancel)) { // Try to put the ones we moved back. pTrackCancel->Reset(); for( --i; i >= 0; i-- ) MoveFile( papszFileList[i], papszMovedFileList[i]); CSLDestroy( papszFileList ); CSLDestroy( papszMovedFileList ); return false; } } m_sPath = CPLFormFilename(szDestPath, CPLGetFilename(m_sPath), NULL); CSLDestroy( papszFileList ); CSLDestroy( papszMovedFileList ); return true; }