TrueVFS net.java.truevfs.access.TFile.TFile.rm()无法删除该文件

时间:2012-12-09 09:15:04

标签: truezip truevfs

在卸载后,TrueVFS无法删除该文件并抛出以下异常。

    java.nio.file.DirectoryNotEmptyException: tar:file:/D:/tmp/0554de32-5a95-4b58-a05d-d12effa68abc.tar!/
    at net.java.truevfs.kernel.impl.ArchiveFileSystem.unlink(ArchiveFileSystem.scala:326)
    at net.java.truevfs.kernel.impl.BasicArchiveController.unlink(BasicArchiveController.scala:222)
    at net.java.truevfs.kernel.impl.DefaultManager$BackController.net$java$truevfs$kernel$impl$CacheController$$super$unlink(DefaultManager.scala:39)
    at net.java.truevfs.kernel.impl.CacheController$class.unlink(CacheController.scala:105)
    at net.java.truevfs.kernel.impl.DefaultManager$BackController.net$java$truevfs$kernel$impl$SyncController$$super$unlink(DefaultManager.scala:39)
    at net.java.truevfs.kernel.impl.SyncController$$anonfun$unlink$1.apply$mcV$sp(SyncController.scala:100)
    at net.java.truevfs.kernel.impl.SyncController$$anonfun$unlink$1.apply(SyncController.scala:98)
    at net.java.truevfs.kernel.impl.SyncController$$anonfun$unlink$1.apply(SyncController.scala:98)
    at net.java.truevfs.kernel.impl.SyncController$class.net$java$truevfs$kernel$impl$SyncController$$apply(SyncController.scala:119)
    at net.java.truevfs.kernel.impl.SyncController$class.unlink(SyncController.scala:98)
    at net.java.truevfs.kernel.impl.DefaultManager$BackController.net$java$truevfs$kernel$impl$LockController$$super$unlink(DefaultManager.scala:39)
    at net.java.truevfs.kernel.impl.LockController$$anonfun$unlink$1.apply$mcV$sp(LockController.scala:92)
    at net.java.truevfs.kernel.impl.LockController$$anonfun$unlink$1.apply(LockController.scala:92)
    at net.java.truevfs.kernel.impl.LockController$$anonfun$unlink$1.apply(LockController.scala:92)
    at net.java.truevfs.kernel.impl.LockingStrategy.apply(LockingStrategy.scala:84)
    at net.java.truevfs.kernel.impl.LockController$class.unlink(LockController.scala:92)
    at net.java.truevfs.kernel.impl.DefaultManager$BackController.unlink(DefaultManager.scala:39)
    at net.java.truevfs.kernel.impl.ArchiveControllerAdapter.unlink(ArchiveControllerAdapter.scala:35)
    at net.java.truevfs.kernel.spec.FsDecoratingController.unlink(FsDecoratingController.java:111)
    at net.java.truevfs.kernel.impl.FalsePositiveArchiveController$$anonfun$1.apply(FalsePositiveArchiveController.scala:132)
    at net.java.truevfs.kernel.impl.FalsePositiveArchiveController$$anonfun$1.apply(FalsePositiveArchiveController.scala:131)
    at net.java.truevfs.kernel.impl.FalsePositiveArchiveController$TryChild$.apply(FalsePositiveArchiveController.scala:195)
    at net.java.truevfs.kernel.impl.FalsePositiveArchiveController.unlink(FalsePositiveArchiveController.scala:143)
    at net.java.truevfs.access.TFile.rm(TFile.java:2216)
    at net.java.truevfs.access.TFile.rm(TFile.java:2195

tar文件已成功创建,因此没有问题。

这就是我在做什么。

  1. 配置True VFS

    TConfig config = TConfig.current(); config.setArchiveDetector(new TArchiveDetector(“tar”,new TarDriver()));

  2. 创建tar

  3. 卸载tar

    TVFS.umount(tar文件);

    转换为字节并发送。

  4. 删除文件

    tarFile.rm()

  5. 我还尝试了tarFile.rm_r()和普通的java.io.File.delete()。但他们都没有工作。

    有人可以告诉我出了什么问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

TrueVFS将TAR文件抽象为虚拟目录,因此只有在它为空时才能将其删除。要以递归方式删除包含其所有成员的(虚拟)目录,只需调用TFile.rm_r()即可。你说你试过了,但也许你以前的尝试有副作用,所以我建议重复它,看看你能走多远。