如何使用Phing删除符号链接?

4

我该如何使用Phing删除符号链接,以使其在Windows上也能正常工作?

创建符号链接很容易并且可以跨平台使用:

<symlink 
    target="${sharedPath}zend-framework/ZendFramework-${version.zf}/library/Zend/" 
    link="library/Zend" />

但是也不
<delete dir="symlinked folder" />

nor

<delete file="symlinked folder" />

如何移除符号链接?


附加信息:

  • 我正在运行phing 2.4.10
  • Phing实际上会输出[delete]路径以删除文件/文件夹,但符号链接仍然存在。因此没有错误消息和明显的失败。

你知道正在发生什么类型的故障吗?快速查看源代码,它似乎应该支持链接。 DeleteTask.php 操作 PhingFile 实例,其支持链接。看起来 Phing 有许多地方试图指示可能存在的故障,所以我想这里是否未被捕获。最起码,您可以在代码流过这些文件(DeleteTask.php和PhingFile.php)时进行调试。 - quickshiftin
你正在运行哪个版本的 Phing? - Michiel
1
你是否不愿意编辑Phing内部的代码?看起来应该进入FileSystem.php中的这个函数,也许可以删除unlink前面的@符号,看看是否会出现什么问题。function unlink($file) { global $php_errormsg; if (false === @unlink($file)) { $msg = "FileSystem::unlink() FAILED. Cannot unlink '$file'. $php_errormsg"; throw new IOException($msg); } } - quickshiftin
1
使用以下代码片段进行复制:<target name="test"> <mkdir dir="temp"/> <symlink target="build.xml" link="test.xml"/> <symlink target="temp" link="linkdir"/> <delete file="test.xml"/> <delete file="linkdir"/> </target>在Linux上运行良好,在Windows上删除linkdir时出现错误。不确定如何修复它(我维护Phing)。 - Michiel
当我再次进行该项目时,我会与大家联系。 - markus
1个回答

2
这是因为你在Windows上创建的符号链接实际上并不是真正的符号链接,而是.LNK文件。所以,它是一个目录,但不是一个链接。因此,将其作为文件删除是行不通的。
因此,你既不能使用一些Windows特殊的程序来创建实际的符号链接(但这些存在取决于版本和/或权限-例如,查看http://technet.microsoft.com/en-us/sysinternals/bb896768以获取详细信息),也不能使用某些可怕的方法来测试给定的文件是否实际上是.LNK文件(请参见http://www.php.net/manual/en/function.is-link.php#91249)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接