我正在開發一個Eclipse插件,它以編程方式修改工作區中的C++文件。我現在試圖保存所做的更改。我看了一下這個解決方案:How can I call save method in eclipse plugin development programmatically,但這包括讓我想要在編輯器中保存的文件打開。由於我有 5k +文件來修改和保存,我不能在保存之前在編輯器中打開它們。如何在不使用編輯器的情況下以編程方式在Eclipse中保存文件?
在尋找解決方案時,我在官方Eclipse論壇上發現了這個主題:https://www.eclipse.org/forums/index.php/t/1070377/。不幸的是,沒有提供答案。
我已經嘗試使用:
PlatformUI.getWorkbench().getService(IHandlerService.class).executeCommand("org.eclipse.ui.file.saveAll", event)
或
IWorkspace.save(boolean, IProgressMonitor)
或
ITranslationUnit.save(IProgressMonitor, boolean)
或
ICProject.save(IProgressMonitor, boolean)
但這些解決方案都沒有工作。 因此,我的問題是:
如何在不使用編輯器的情況下以編程方式在Eclipse中保存文件?
感謝很多提前
編輯:什麼我想要實現
deleteAndSave(IFunction functionToDelete) {
boolean forceDeletion = true;
IProgressMonitor progressMonitor = new NullProgressMonitor();
//delete the portion of code
functionToDelete.delete(forceDeletion, progressMonitor);
//we get the file containing the function
IFile file = (IFile) functionToDelete.getUnderlyingResource();
//save the file to the disk (ideally 'file.save()' ?)
file.getWorkspace().save(true, progressMonitor);
}
在此執行結束
例子,我希望新版本要保存在磁盤上的文件。如果我在編輯器中打開該文件,但該文件被Eclipse標記爲未保存(在文件名稱前面顯示一個星號),該功能將被正確刪除,修改將顯示在IDE中。
編輯:
雖然這不會回答這個問題(不使用編輯器),我得到了正確的行爲:
deleteAndSave(IFunction functionToDelete) {
IProgressMonitor progressMonitor = new NullProgressMonitor();
IWorkbenchPage activePage = PlatformUI
.getWorkbench()
.getActiveWorkbenchWindow()
.getActivePage();
functionToDelete.delete(true, progressMonitor);
IFile file = (IFile) functionToDelete.getUnderlyingResource();
IEditorPart editorPart = IDE.openEditor(activePage, file);
editorPart.doSave(progressMonitor);
activePage.closeEditor(editorPart, false);
}
然而,這將打開每個文件並關閉編輯頁面它立即,所以性能不滿足大量的文件。
需要更多信息。如果你沒有在編輯器中打開文件,你想保存什麼文件,以及你如何加載文件?即您試圖保存的編輯存儲在哪裏。 –
*不回答你的問題*使用org.eclipse.ui.ide.IDE。saveAllEditors(IResource [],布爾值)可能是保存編輯器的最佳方式。 –
插件通過'ISourceManipulation.delete'刪除一些特定的代碼部分。該插件通過Eclipse索引('IIndex')解析給定項目中的所有文件,並刪除相關代碼,所有這些都發生在後臺。因此,某些代碼已被刪除的文件與磁盤不同步,但它們在編輯器中未打開。 – AGenevray