gpt4 book ai didi

java:检查文件是否可以在Windows下移动

转载 作者:行者123 更新时间:2023-12-01 15:29:08 24 4
gpt4 key购买 nike

我需要重命名一个文件(将其保存在同一目录中);我似乎找不到一种方法来查看我的程序是否具有所需的权限:

Files.isWritable(directory) && Files.isWritable(oldFile);

总是返回true,无论运行的用户是否有权写入文件(我猜他们只检查文件是否是只读的,即使这违反了javadoc中规定的约定);我没有在安全管理器下运行,因此无法调用

System.getSecurityManager.checkDelete(oldFile.toString());

我需要检查多个文件的重命名是否(可能)成功,所以我不能只是 try catch 异常。
有出路吗?显然,可移植解决方案会很受欢迎,但我会选择 Windows 特定的解决方案......

最佳答案

嗯,您无法通过这种方式检查 Windows ACL。 “ native ”解决方案相当简单,因为 Windows 支持文件系统上的事务。只需调用 DeleteFileTransacted,并在任何一个删除失败时回滚事务。

如果您不使用事务,那么第二个选项是首先使用显式 DELETE 所需访问权限打开句柄(DELETE 是标准 WinNT 访问权限之一) ,否认任何共享。当且仅当所有文件都成功时,才使用 SetFileInformationByHandle(handle, FileDispositionInfo, &fdiObj, sizeof(fdiObj));

删除所有文件

(后者不是事务,因此可能会出现隔离问题,进而影响原子性)。

关于java:检查文件是否可以在Windows下移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9771594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com