在IFile上创建IMarker时的ResourceException(链接资源)

时间:2011-07-12 13:29:38

标签: eclipse eclipse-plugin

我在更新“旧”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);

有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我猜测fileName是您想要获取的文件的完全限定路径。我也猜测你正在寻找的文件已经在工作区中,即使它是链接的(如果没有,那么这将不起作用。你首先需要在获得IFile之前将文件添加到项目中对于它)。

你需要做这样的事情:

IFiles[] files = workspace.getRoot().findFilesForLocationURI("file:" + fileName);

然后,这将找到工作区中与文件系统中的文件对应的所有文件。

您上面尝试给出ResourceException的原因是您尝试传入文件系统路径以从工作区获取IFile对象。 Eclipse工作区是对底层文件系统的抽象,不能直接使用绝对路径。

答案 1 :(得分:0)

对于Resources API,Paths通常表示工作空间中的路径,Location通常指文件系统中或工作空间外的位置。如果您已经有了一个工作区路径,那么只需向IilespaceRoot询问IFile并继续您正在做的事情。