代码之家  ›  专栏  ›  技术社区  ›  Paul Tomblin

为什么这段代码会在Windows上死掉?

  •  5
  • Paul Tomblin  · 技术社区  · 15 年前

    我正在尝试将一些代码从Linux移植到Windows。我对窗户真的不太了解,所以我有点盲目。所讨论的代码试图使用org.apache.commons.io.FileUtils删除一些目录

      // If the mergesegs worked, delete the segment dirs
        for (File file : segments.listFiles())
        {
            if (!file.equals(mergedSegFile))
            {
                LOG.debug("deleting segment dir " + file);
                FileUtils.deleteDirectory(file);
            }
        }
    

    segments 是一个文件 mergedSegFile . 它死得很惨 "Unable to delete file: c:\www\tomcat\crawls\test\TestingCode.site\crawldir\segments\20101128194700\parse_test\part-00000\data" .

    这些文件是由以前运行的同一个程序创建的(该程序执行一些Nutch爬网)。做一个 ls -l 在cygwin下显示用户和组是正确的,但是perms是000。

    更多信息:

    • dir 不告诉我任何关于权限的信息。
    • 我可以用 del 在cmd.exe窗口或 rm -rf 在cygwin bash的窗户上。
    • 有问题的文件及其所在的目录是在同一程序的同一运行过程中较早创建的。
    • 计算机运行的是Windows 7,所以我认为这意味着它是NTFS。
    1 回复  |  直到 15 年前
        1
  •  3
  •   EboMike    15 年前

    这里有很多可能性。这条路本身看起来并不坏。最好的办法是尝试从命令提示符中手动删除该目录,并查看出现了什么错误。

    检查事项:

    • 应用程序正在使用目录或其任何内容吗?
    • 目录或其任何文件是只读的吗?(检查 dir ,不是 ls ).
    • 目录或其任何文件是否具有特殊权限,而您不是管理员?
    • 顺便问一下,我想这是NTFS吧?
    推荐文章