Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 在IFile(链接资源)上创建IMarker时发生ResourceException_Eclipse_Eclipse Plugin - Fatal编程技术网

Eclipse 在IFile(链接资源)上创建IMarker时发生ResourceException

Eclipse 在IFile(链接资源)上创建IMarker时发生ResourceException,eclipse,eclipse-plugin,Eclipse,Eclipse Plugin,我在更新“旧”Eclipse插件时遇到一些问题。下面是我想做的事情和原始插件做的事情: (使用文件名和错误信息-->在控制台上解析编译器输出仍然有效) -->将链接设置为文件中的位置 -->将标记设置为文件中的位置 我过去所做的是从文件的路径字符串中获取IFile并从中生成链接和标记: IFile ifile; IWorkspace workspace = ResourcesPlugin.getWorkspace(); IPath path = new Path(fileName); IFil

我在更新“旧”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:Resource'/path/to/file.c'不存在。 这是否可能与源文件仅链接到项目中,而不是在项目中物理链接有关

IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath location = new Path(fileName);
IFile ifile = workspace.getRoot().getFile(location);
有人能帮忙吗


谢谢大家!

我猜
fileName
是您想要获取的文件的完全限定路径。我还猜测,您正在查找的文件已经在工作区中,即使它已链接(如果未链接,则此操作将不起作用。在获取IFile之前,您需要先将该文件添加到项目中)

您需要这样做:

IFiles[] files = workspace.getRoot().findFilesForLocationURI("file:" + fileName);
然后,这将查找工作区中与文件系统中的文件相对应的所有文件


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

对于资源API,路径通常指工作区中的路径,位置通常指文件系统中或工作区外的位置。如果您已经有了一个工作区路径,只需向IWorkspaceRoot请求IFile,然后继续您的工作