【问题标题】:How do I test whether I could write to a filename?如何测试是否可以写入文件名?
【发布时间】:2011-07-01 01:28:54
【问题描述】:

标题可能看起来微不足道,但这并不像听起来那么容易。你不能只检查文件的权限,因为文件可能不存在,你可能有必要的权限来创建它然后写入它。但前提是您对目录具有写入权限,并且可能具有执行权限,并且可能具有所有父目录的权限。或者可能不是。我不确定。

那么,给定一个文件名,为了正确测试我是否可以打开并写入具有该文件名的文件,我需要考虑哪些情况所有?这并不特定于任何一种编程语言。我只想要逻辑。但欢迎使用真实编程语言的示例。

【问题讨论】:

  • 您为什么不尝试触摸文件,如果成功退出,您知道您可以写入特定文件名。如果它以错误代码退出,你知道你不能。这似乎是最简单的方法。然后,如果您不想要该文件,则可以删除它。
  • 如果文件不存在,touch不会返回任何错误,它会创建一个零大小的新文件,你不能这样弄!

标签: file-io file-permissions directory-permissions


【解决方案1】:

这样的测试不一定很有用——你只是在设置自己 对于竞争条件,如果文件在您的检查之间由于某种原因变得不可写 和写尝试。 (其他一些进程可能会更改权限、移动或删除 父目录,用完设备上的最后一个可用空间等...)

我会继续尝试写入,并努力检查错误 在每个步骤(打开,每次写入尝试,关闭),操作可以想象 失败。

【讨论】:

    【解决方案2】:
    1. 这取决于运行程序的进程的所有者,所有者是否有权写入该目录。例如,以 www 用户身份运行的 apache 可能无法写入 root 拥有的目录,并且没有其他或组的权限。

    2. 您可以采用命中或跟踪方式,例如尝试创建文件以查看它是否成功,以防它无法捕获正确的错误代码以及没有权限或目录已满并采取纠正措施。

    3. 如果目录有空间,文件是否已经存在等,您可以通过编程检查用户是否有权写入目录。通过使用系统公开的某些 API 和语言公开,这种更好的方法要小心案例而不是处理失败案例。

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      相关资源
      最近更新 更多