【问题标题】:LibGDX FileHandle: Renaming a file deletes the fileLibGDX FileHandle:重命名文件会删除文件
【发布时间】:2017-12-12 21:30:52
【问题描述】:

要重命名我使用的文件

FileHandle#moveTo(FileHandle dest)

在大多数情况下都可以正常工作。但是,例如,当我尝试将文件“abc”重命名为“ABC”时,该文件将被删除。 我认为问题在于文件名不敏感(至少在桌面、Windows 上)。 这是上面提到的方法的实现(我在代码中留下了注释):

public void moveTo (FileHandle dest) {
    if (type == FileType.Classpath) throw new GdxRuntimeException("Cannot move a classpath file: " + file);
    if (type == FileType.Internal) throw new GdxRuntimeException("Cannot move an internal file: " + file);
    copyTo(dest); // file is not copied into another file, since "abc" file  is the same as the dest "ABC" file
    delete(); // and here the "original" file is deleted, but in this case original file equals to dest file, so the file is lost
    if (exists() && isDirectory()) deleteDirectory();
}

问题:

1) 这种行为是故意的吗?老实说,感觉不对。

2) 可以这样重命名吗(在这种情况下可以,但可能还有其他警告):

FileHandle src = ...;
FileHandle dest = ...;
src.file().renameTo(dest.file());

如果没有,正确的方法是什么?

更新

按照@exenza 的建议,在 LibGDX 问题跟踪器上打开了一个 issue

【问题讨论】:

  • 您的桌面应用程序在什么操作系统上运行? Android 或 linux moveTo 方法应该可以正常工作,如“abc”!=“ABC”。 Windows 对文件名不区分大小写,afaik
  • 桌面操作系统是Windows,忘了说。是的,Android 上没有问题。但是感觉还是不对,这样的方法不应该在任何平台上都有预期的行为吗?
  • 我同意,在我看来,所有受 LibGDX 操作系统支持的行为应该是相同的。至少它不应该删除 Windows 上的文件,恕我直言。我建议提出一个问题/错误on LibGDX issue tracker。如果你这样做,请在此处发布参考

标签: java libgdx


【解决方案1】:

在 Windows 上,文件名不区分大小写。这意味着“abc”和“ABC”指的是同一个文件。您的copyTo() 调用会将文件复制到自身。然后delete() 删除该文件。在所有这些过程中,只有一个文件,没有副本。

【讨论】:

  • 感谢您确认我的假设。有没有方便的解决方案?
  • @Arctic45 为什么首先需要重命名文件? libGDX 是否有 moveTo() 函数,这样您就不必手动删除?
  • 抱歉,不确定您的意思。我不会手动删除文件。 FileHandle 中只有一个 moveTo() 方法,在我的问题中我放了它的原始实现,我没有写那个代码。而且没有rename方法,所以我改用moveTo
  • @Arctic45 我误读了您的问题,并认为您编写了 OP 中发布的代码
  • @Arctic45 我建议你用 libgdx 提交一份大报告
猜你喜欢
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 2017-04-01
  • 2017-08-18
  • 1970-01-01
  • 2022-10-04
相关资源
最近更新 更多