我在更新“旧”Eclipse插件时遇到了一些问题。这是我想要做的以及原始插件的作用:
(在控制台上解析具有文件名和错误信息的编译器输出 - >仍然有效)
- >设置文件中位置的链接 - >将标记设置为文件中的位置
我过去做的是从文件的路径字符串中获取IFile并从中生成链接和标记:
IFile ifile;
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath path = new Path(fileName);
IFiles[] files = workspace.getRoot().findFilesForLocation(path);
...
ifile = iFiles[0];
Map attributes = new HashMap();
attributes.put(IMarker.SEVERITY, new Integer (severity));
MarkerUtilities.setLineNumber(attributes, lineNumber);
MarkerUtilities.setMessage(attributes, message);
MarkerUtilities.createMarker(ifile, attributes,
IMarker
由于不推荐使用findFilesForLocation,我试图找到另一种方法,但我没有成功。使用更改的代码获取IFile总是会导致异常:org.eclipse.core.internal.resources.ResourceException:资源'/path/to/file.c'不存在。 这是否可能与源文件仅链接到项目中的事实有关,而不是物理上在项目中?
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath location = new Path(fileName);
IFile ifile = workspace.getRoot().getFile(location);
有人可以帮忙吗?
谢谢!
答案 0 :(得分:0)
我猜测fileName
是您想要获取的文件的完全限定路径。我也猜测你正在寻找的文件已经在工作区中,即使它是链接的(如果没有,那么这将不起作用。你首先需要在获得IFile之前将文件添加到项目中对于它)。
你需要做这样的事情:
IFiles[] files = workspace.getRoot().findFilesForLocationURI("file:" + fileName);
然后,这将找到工作区中与文件系统中的文件对应的所有文件。
您上面尝试给出ResourceException
的原因是您尝试传入文件系统路径以从工作区获取IFile对象。 Eclipse工作区是对底层文件系统的抽象,不能直接使用绝对路径。
答案 1 :(得分:0)
对于Resources API,Paths通常表示工作空间中的路径,Location通常指文件系统中或工作空间外的位置。如果您已经有了一个工作区路径,那么只需向IilespaceRoot询问IFile并继续您正在做的事情。