如何在Ruby中检测目录是否可写

如何在Ruby中检测目录是否可写,ruby,file,permissions,directory,writable,Ruby,File,Permissions,Directory,Writable,我正在使用Ruby,在尝试创建新文件之前,需要检测目录是否可写 我尝试了以下代码,根据@path是否为目录,该代码正确返回true/false。 但是,当@path文件夹没有写入权限时,它仍然返回true if File.directory?(@path) && File.writable?(@path) #is a writeable directory true else #is not a writeable directory fa

我正在使用Ruby,在尝试创建新文件之前,需要检测目录是否可写

我尝试了以下代码,根据@path是否为目录,该代码正确返回true/false。 但是,当@path文件夹没有写入权限时,它仍然返回true

  if File.directory?(@path) && File.writable?(@path)
    #is a writeable directory
    true
  else
    #is not a writeable directory
    false
  end
我已经查看了File和Dir类的帮助,但没有看到任何允许我检查目录写入权限的方法。有办法吗


我只需要它在Windows上工作,使用Ruby 1.9.3。

您可以通过使用
world\u writable?(文件名)

对于Windows,您希望从gem获得或方法


<> P>你应该考虑对Daniel Berger有所贡献,因为没有他的Win32 -宝石Ruby在Windows上会是一个更具敌意的地方。它在所有情况下都返回零。我已经通过将一个新文件写入目录并再次读取其内容对其进行了测试
code directory=“C:”+File::SEPARATOR+“1234”put File.directory?(directory)。inspect put File.world_writeable?(directory)。inspect File.open(directory+File::SEPARATOR+“newfile.txt”,“w+”){f | f.write“FileContents”}File.open(directory+File::SEPARATOR+“newfile.txt”,“r”){f | put f.read}
对于写入权限被拒绝的目录,File.attributes似乎只会返回
[“目录”,“索引”]
。类似地,File.readonly?返回false。在文件上使用时,#属性和#只读?方法按预期工作。@SimonMayer非常奇怪。我从未使用过这个,我现在也不在Windows上测试,但我的经验是win32-gems非常可靠。由于这也被明确地记录为适用于目录,我想知道:你确定你的目录的权限是你所认为的吗?我目前只能测试一个相当奇怪的情况,但由于它可以合法地发生,我还是想检测它。我创建了一个新的本地文件夹,并明确拒绝了我的用户(当然也包括管理员用户)的“写入”权限。因此,不同寻常的是,我是目录的所有者,但无法对其进行写入。这肯定会阻止Ruby使用
file.open(“…”,“w+”)
创建和写入文件,因为只要我删除写拒绝,就可以创建/编辑文件。也许#attributes只返回文件的“readonly”,而不是目录。