我正在尝试为Eclipse插件实现刷新算法,但无法找到处理链接文件夹的方法。
总结一下,我的应用程序中有一些功能可以在我工作的同一个项目中生成一些文件。为了查看这些文件,我通常需要按F5。但是我尝试实现刷新算法,因此我不必再按F5并自动进行刷新。
这是我算法的一部分
File osFile = iPath.toFile();
if (osFile.exists()) {
if (osFile.isFile()) {
IFile[] filesArr = workspaceRoot
.findFilesForLocationURI(iPath.toFile().toURI());
if (filesArr != null && filesArr.length > 0) {
for (IFile file : filesArr) {
try {
file.refreshLocal(IResource.DEPTH_INFINITE,
new NullProgressMonitor());
} catch (CoreException e) {
Activator.getDefault().log(IStatus.ERROR,
e.getLocalizedMessage(), e);
}
}
}
} else if (osFile.isDirectory()) {
iPath = iPath.makeRelativeTo(workspaceRoot.getLocation());
IResource resource = null;
if (iPath.segmentCount() == 1) {
resource = workspaceRoot.getProject(iPath.toString());
} else {
try {
resource = workspaceRoot.getFolder(iPath);
} catch (Exception e) {
Activator.getDefault().log(IStatus.ERROR,
e.getLocalizedMessage(), e);
}
}
try {
if (resource != null) {
resource.refreshLocal(IResource.DEPTH_INFINITE,
new NullProgressMonitor());
}
} catch (CoreException e) {
Activator.getDefault().log(IStatus.ERROR,
e.getLocalizedMessage(), e);
}
}
iPath是我要刷新的文件或文件夹的绝对路径(C:......)。
对于单个文件和非链接文件夹,这很有效,但是当涉及链接文件夹时,它会失败。问题来自于这一点:
iPath = iPath.makeRelativeTo(workspaceRoot.getLocation());
在非链接文件夹中,它会将绝对路径(C:......)转换为Eclipse本地路径(MyProject / tmp / destinationFolder),对于链接文件夹,它将获取绝对路径在操作系统上。
然后是以下代码行:
resource = workspaceRoot.getFolder(iPath);
将从路径中删除“C:\”并将其连接到暂定的eclipse路径(产生类似F / user / desktop / project / folder的东西),最终指向任何内容。
那么,任何人都可以帮我重构我的算法以正确处理链接文件夹吗?可能有一些我不熟悉的方法或类,并且错过了,这可能正好处理这类问题。
答案 0 :(得分:1)
IWorkspaceRoot
有findContainersForLocationURI
,它返回位置URI的容器(容器是文件夹或项目)。