bool wxRenameFile(const wxString& file1, const wxString& file2, bool overwrite) { if ( !overwrite && wxFileExists(file2) ) { wxLogSysError ( _("Failed to rename the file '%s' to '%s' because the destination file already exists."), file1.c_str(), file2.c_str() ); return false; } // Normal system call if ( wxRename (file1, file2) == 0 ) return true; // Try to copy if (wxCopyFile(file1, file2, overwrite)) { wxRemoveFile(file1); return true; } // Give up wxLogSysError(_("File '%s' couldn't be renamed '%s'"), file1, file2); return false; }
void MusikApp::CheckOldVersion() { wxString sVersion; if ( wxFileExists( MUSIK_VERSION_FILENAME ) ) { sVersion = ReadOldVersionFile(); wxRemoveFile(MUSIK_VERSION_FILENAME); wxRename(MUSIK_OLD_DB_FILENAME,MUSIK_DB_FILENAME); } else { //-------------------------------------------------// //--- if these files exist, but the version.dat ---// //--- does not, some version prior to 0.1.3 was ---// //--- installed. give user a nice little ---// //--- warning. ---// //-------------------------------------------------// if ( wxFileExists( MUSIK_SOURCES_FILENAME ) && wxFileExists( MUSIK_OLD_DB_FILENAME ) ) { wxMessageBox(wxString(MUSIKAPPNAME) + _(" has detected version 0.1.2 or earlier was previously installed.\n\nDue to the changes from 0.1.2 to the current version, your Sources list and Library must be reset. We apologize for any inconvenience this may cause.") , MUSIKAPPNAME_VERSION, wxICON_INFORMATION ); if ( wxFileExists( MUSIK_SOURCES_FILENAME ) ) wxRemoveFile( MUSIK_SOURCES_FILENAME ); if ( wxFileExists( MUSIK_OLD_DB_FILENAME ) ) wxRemoveFile( MUSIK_OLD_DB_FILENAME ); } } }
bool RenameFile(wxWindow* parent, wxString dir, wxString from, wxString to) { if (dir.Right(1) != _T("\\") && dir.Right(1) != _T("/")) dir += wxFileName::GetPathSeparator(); #ifdef __WXMSW__ to = to.Left(255); if ((to.Find('/') != -1) || (to.Find('\\') != -1) || (to.Find(':') != -1) || (to.Find('*') != -1) || (to.Find('?') != -1) || (to.Find('"') != -1) || (to.Find('<') != -1) || (to.Find('>') != -1) || (to.Find('|') != -1)) { wxMessageBox(_("Filenames may not contain any of the following characters: / \\ : * ? \" < > |"), _("Invalid filename"), wxICON_EXCLAMATION); return false; } SHFILEOPSTRUCT op; memset(&op, 0, sizeof(op)); from = dir + from + _T(" "); from.SetChar(from.Length() - 1, '\0'); op.pFrom = from; to = dir + to + _T(" "); to.SetChar(to.Length()-1, '\0'); op.pTo = to; op.hwnd = (HWND)parent->GetHandle(); op.wFunc = FO_RENAME; op.fFlags = FOF_ALLOWUNDO; return SHFileOperation(&op) == 0; #else if ((to.Find('/') != -1) || (to.Find('*') != -1) || (to.Find('?') != -1) || (to.Find('<') != -1) || (to.Find('>') != -1) || (to.Find('|') != -1)) { wxMessageBox(_("Filenames may not contain any of the following characters: / * ? < > |"), _("Invalid filename"), wxICON_EXCLAMATION); return false; } return wxRename(dir + from, dir + to) == 0; #endif }
void AudacityProject::Save(bool overwrite /* = true */ , bool fromSaveAs /* = false */ ) { if (!fromSaveAs && mDirManager.GetProjectName() == "") { SaveAs(); return; } // // Always save a backup of the original project file // wxString safetyFileName = ""; if (wxFileExists(mFileName)) { #ifdef __WXGTK__ safetyFileName = mFileName + "~"; #else safetyFileName = mFileName + ".bak"; #endif if (wxFileExists(safetyFileName)) wxRemoveFile(safetyFileName); wxRename(mFileName, safetyFileName); } wxString project = mFileName; if (project.Len() > 4 && project.Mid(project.Len() - 4) == ".aup") project = project.Mid(0, project.Len() - 4); wxString projName = wxFileNameFromPath(project) + "_data"; wxString projPath = wxPathOnly(project); // We are about to move files from the current directory to // the new directory. We need to make sure files that belonged // to the last saved project don't get erased, so we "lock" them. // (Otherwise the new project would be fine, but the old one would // be empty of all of its files.) // Lock all blocks in all tracks of the last saved version if (mLastSavedTracks && !overwrite) { TrackListIterator iter(mLastSavedTracks); VTrack *t = iter.First(); while (t) { if (t->GetKind() == VTrack::Wave) ((WaveTrack *) t)->Lock(); t = iter.Next(); } } // This renames the project directory, and moves or copies // all of our block files over bool success = mDirManager.SetProject(projPath, projName, !overwrite); // Unlock all blocks in all tracks of the last saved version if (mLastSavedTracks && !overwrite) { TrackListIterator iter(mLastSavedTracks); VTrack *t = iter.First(); while (t) { if (t->GetKind() == VTrack::Wave) ((WaveTrack *) t)->Unlock(); t = iter.Next(); } } if (!success) { wxMessageBox(wxString:: Format (_("Could not save project. " "Perhaps %s is not writeable,\n" "or the disk is full."), (const char *) project)); if (safetyFileName) wxRename(safetyFileName, mFileName); return; } wxTextFile f(mFileName); f.Create(); f.Open(); if (!f.IsOpened()) { wxMessageBox(_("Couldn't write to file: ") + mFileName); if (safetyFileName) wxRename(safetyFileName, mFileName); return; } f.AddLine("AudacityProject"); f.AddLine("Version"); f.AddLine(AUDACITY_FILE_FORMAT_VERSION); f.AddLine("projName"); f.AddLine(projName); f.AddLine("sel0"); f.AddLine(wxString::Format("%g", mViewInfo.sel0)); f.AddLine("sel1"); f.AddLine(wxString::Format("%g", mViewInfo.sel1)); f.AddLine("vpos"); f.AddLine(wxString::Format("%d", mViewInfo.vpos)); f.AddLine("h"); f.AddLine(wxString::Format("%g", mViewInfo.h)); f.AddLine("zoom"); f.AddLine(wxString::Format("%g", mViewInfo.zoom)); f.AddLine("rate"); f.AddLine(wxString::Format("%g", mRate)); f.AddLine("BeginTracks"); mTracks->Save(&f, overwrite); #ifdef __WXMAC__ f.Write(wxTextFileType_Mac); #else f.Write(); #endif f.Close(); #ifdef __WXMAC__ FSSpec spec; wxMacFilename2FSSpec(mFileName, &spec); FInfo finfo; if (FSpGetFInfo(&spec, &finfo) == noErr) { finfo.fdType = AUDACITY_PROJECT_TYPE; finfo.fdCreator = AUDACITY_CREATOR; FSpSetFInfo(&spec, &finfo); } #endif if (mLastSavedTracks) { mLastSavedTracks->Clear(true); delete mLastSavedTracks; } mLastSavedTracks = new TrackList(); TrackListIterator iter(mTracks); VTrack *t = iter.First(); while (t) { mLastSavedTracks->Add(t->Duplicate()); t = iter.Next(); } mStatus->SetField(wxString::Format(_("Saved %s"), (const char *) mFileName), 0); }
void CLocalListView::OnEndLabelEdit(wxListEvent& event) { if (event.IsEditCancelled()) return; int index = event.GetIndex(); if (!index && m_hasParent) { event.Veto(); return; } if (event.GetLabel() == _T("")) { event.Veto(); return; } wxString newname = event.GetLabel(); #ifdef __WXMSW__ newname = newname.Left(255); if ((newname.Find('/') != -1) || (newname.Find('\\') != -1) || (newname.Find(':') != -1) || (newname.Find('*') != -1) || (newname.Find('?') != -1) || (newname.Find('"') != -1) || (newname.Find('<') != -1) || (newname.Find('>') != -1) || (newname.Find('|') != -1)) { wxMessageBox(_("Filenames may not contain any of the following characters: / \\ : * ? \" < > |"), _("Invalid filename"), wxICON_EXCLAMATION); event.Veto(); return; } SHFILEOPSTRUCT op; memset(&op, 0, sizeof(op)); wxString dir = m_dir; if (dir.Right(1) != _T("\\") && dir.Right(1) != _T("/")) dir += _T("\\"); wxString from = dir + m_fileData[m_indexMapping[index]].name + _T(" "); from.SetChar(from.Length() - 1, '\0'); op.pFrom = from; wxString to = dir + newname + _T(" "); to.SetChar(to.Length()-1, '\0'); op.pTo = to; op.hwnd = (HWND)GetHandle(); op.wFunc = FO_RENAME; op.fFlags = FOF_ALLOWUNDO; if (SHFileOperation(&op)) event.Veto(); else { m_fileData[m_indexMapping[index]].name = newname; return; } #else if ((newname.Find('/') != -1) || (newname.Find('*') != -1) || (newname.Find('?') != -1) || (newname.Find('<') != -1) || (newname.Find('>') != -1) || (newname.Find('|') != -1)) { wxMessageBox(_("Filenames may not contain any of the following characters: / * ? < > |"), _("Invalid filename"), wxICON_EXCLAMATION); event.Veto(); return; } wxString dir = m_dir; if (dir.Right(1) != _T("\\") && dir.Right(1) != _T("/")) dir += _T("\\"); if (wxRename(dir + m_fileData[m_indexMapping[index]].name, dir + newname)) m_fileData[m_indexMapping[index]].name = newname; else event.Veto(); #endif }
void LabelDialog::OnExport(wxCommandEvent &event) { int cnt = mData.GetCount(); // Silly user (could just disable the button, but that's a hassle ;-)) if (cnt == 0) { wxMessageBox(_("No labels to export.")); return; } wxString fName; fName = FileSelector(_("Export Labels As:"), NULL, _("labels.txt"), wxT("txt"), wxT("*.txt"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT | wxRESIZE_BORDER, this); if (fName == wxT("")) return; // Move existing files out of the way. Otherwise wxTextFile will // append to (rather than replace) the current file. if (wxFileExists(fName)) { #ifdef __WXGTK__ wxString safetyFileName = fName + wxT("~"); #else wxString safetyFileName = fName + wxT(".bak"); #endif if (wxFileExists(safetyFileName)) wxRemoveFile(safetyFileName); wxRename(fName, safetyFileName); } wxTextFile f(fName); #ifdef __WXMAC__ wxFile *temp = new wxFile(); temp->Create(fName); delete temp; #else f.Create(); #endif f.Open(); if (!f.IsOpened()) { wxMessageBox(_("Couldn't write to file: ") + fName); return; } // Transfer our collection to a temporary label track LabelTrack *lt = new LabelTrack(mDirManager); int i; for (i = 0; i < cnt; i++) { RowData *rd = mData[i]; lt->AddLabel(rd->stime, rd->etime, rd->title); } // Export them and clean lt->Export(f); delete lt; #ifdef __WXMAC__ f.Write(wxTextFileType_Mac); #else f.Write(); #endif f.Close(); }
void AudacityProject::Save(bool overwrite /* = true */ , bool fromSaveAs /* = false */ ) { if (!fromSaveAs && mDirManager.GetProjectName() == "") { SaveAs(); return; } // // Always save a backup of the original project file // wxString safetyFileName = ""; if (wxFileExists(mFileName)) { #ifdef __WXGTK__ safetyFileName = mFileName + "~"; #else safetyFileName = mFileName + ".bak"; #endif if (wxFileExists(safetyFileName)) wxRemoveFile(safetyFileName); wxRename(mFileName, safetyFileName); } wxString project = mFileName; if (project.Len() > 4 && project.Mid(project.Len() - 4) == ".aup") project = project.Mid(0, project.Len() - 4); wxString projName = wxFileNameFromPath(project) + "_data"; wxString projPath = wxPathOnly(project); bool success = mDirManager.SetProject(projPath, projName, !overwrite); if (!success) { wxMessageBox(wxString:: Format ("Could not save project because the directory %s could not be created.", (const char *) project)); if (safetyFileName) wxRename(safetyFileName, mFileName); return; } wxTextFile f(mFileName); #ifdef __WXMAC__ wxFile *temp = new wxFile(); temp->Create(mFileName); delete temp; #else f.Create(); #endif f.Open(); if (!f.IsOpened()) { wxMessageBox("Couldn't write to " + mFileName); if (safetyFileName) wxRename(safetyFileName, mFileName); return; } f.AddLine("AudacityProject"); f.AddLine("Version"); f.AddLine(AUDACITY_FILE_FORMAT_VERSION); f.AddLine("projName"); f.AddLine(projName); f.AddLine("sel0"); f.AddLine(wxString::Format("%g", mViewInfo.sel0)); f.AddLine("sel1"); f.AddLine(wxString::Format("%g", mViewInfo.sel1)); f.AddLine("vpos"); f.AddLine(wxString::Format("%d", mViewInfo.vpos)); f.AddLine("h"); f.AddLine(wxString::Format("%g", mViewInfo.h)); f.AddLine("zoom"); f.AddLine(wxString::Format("%g", mViewInfo.zoom)); f.AddLine("rate"); f.AddLine(wxString::Format("%g", mRate)); f.AddLine("BeginTracks"); mTracks->Save(&f, overwrite); #ifdef __WXMAC__ f.Write(wxTextFileType_Mac); #else f.Write(); #endif f.Close(); #ifdef __WXMAC__ FSSpec spec; wxMacFilename2FSSpec(mFileName, &spec); FInfo finfo; if (FSpGetFInfo(&spec, &finfo) == noErr) { finfo.fdType = AUDACITY_PROJECT_TYPE; finfo.fdCreator = AUDACITY_CREATOR; FSpSetFInfo(&spec, &finfo); } #endif if (mLastSavedTracks) { TrackListIterator iter(mLastSavedTracks); VTrack *t = iter.First(); while (t) { if (t->GetKind() == VTrack::Wave && !overwrite) ((WaveTrack *) t)->DeleteButDontDereference(); else delete t; t = iter.Next(); } delete mLastSavedTracks; } mLastSavedTracks = new TrackList(); TrackListIterator iter(mTracks); VTrack *t = iter.First(); while (t) { mLastSavedTracks->Add(t->Duplicate()); t = iter.Next(); } mStatus->SetField(wxString::Format("Saved %s", (const char *) mFileName), 0); }
void LabelDialog::OnExport(wxCommandEvent & WXUNUSED(event)) { int cnt = mData.size(); // Silly user (could just disable the button, but that's a hassle ;-)) if (cnt == 0) { wxMessageBox(_("No labels to export.")); return; } // Extract the actual name. wxString fName = mTrackNames[mTrackNames.GetCount() - 1].AfterFirst(wxT('-')).Mid(1); fName = FileSelector(_("Export Labels As:"), wxEmptyString, fName.c_str(), wxT("txt"), wxT("*.txt"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT | wxRESIZE_BORDER, this); if (fName == wxT("")) return; // Move existing files out of the way. Otherwise wxTextFile will // append to (rather than replace) the current file. if (wxFileExists(fName)) { #ifdef __WXGTK__ wxString safetyFileName = fName + wxT("~"); #else wxString safetyFileName = fName + wxT(".bak"); #endif if (wxFileExists(safetyFileName)) wxRemoveFile(safetyFileName); wxRename(fName, safetyFileName); } wxTextFile f(fName); #ifdef __WXMAC__ wxFile{}.Create(fName); #else f.Create(); #endif f.Open(); if (!f.IsOpened()) { wxMessageBox(_("Couldn't write to file: ") + fName); return; } // Transfer our collection to a temporary label track auto lt = mFactory.NewLabelTrack(); int i; for (i = 0; i < cnt; i++) { RowData &rd = mData[i]; lt->AddLabel(rd.selectedRegion, rd.title); } // Export them and clean lt->Export(f); #ifdef __WXMAC__ f.Write(wxTextFileType_Mac); #else f.Write(); #endif f.Close(); }