Ruby FileUtils 移动文件夹出错

413472212 · 2012年02月27日 · 最后由 skandhas 回复于 2012年02月29日 · 7399 次阅读

利用 FileUtils 移动文件夹,但出现错误。in 'rename':Permission denied。想请教下是什么回事

你运行脚本的身份对当前文件夹或者目标文件夹没有写权限。

#1 楼 @Rei 但我已经是管理员身份了,windows 系统的,请问怎样修改

#2 楼 @413472212 Windows 权限不懂,等楼下回答……

@413472212 是不是有 只读属性的文件或是文件夹?

分解一下问题先,自己直接在 windows 上 rename 可以么?

#5 楼 @fsword 给文件改名是很正常的吧。File.rename 在 windows 下能用,没问题。

#2 楼 @413472212 在脚本上右键选择“以管理员身份运行”,试下。 如果还不行,打开 cmd 输入 rename old_file new_file可以吗? #6 楼 @skandhas @fsword 说的应该是 cmd 下的rename

#4 楼 @skandhas 没有只读属性的文件,但存文件的文件夹是只读的,但修改不了那个属性,修改后还是会自动变回来

#7 楼 @camel @fsword : 呵呵 是我理解错了@fsword的意思 :)

@413472212 很多种情况会导致 EACCES。你把你的出错 FileUtils 的代码及出错的信息放上来看看呗。

用 force 参数看看,但也不一定能创建成功。force 只是不报 error。

如果你使用了 FileUtils 的 move 或 mv,第一个参数要求是文件名或是文件名的数组,不能是目录。如果是目录,则会 Permission denied。

#12 楼 @skandhas 原来如此,我的第一个参数是目录,所以才出错啊。那如果想直接移动目录该怎样做啊。

管理员身份运行。。

#13 楼 @413472212 前面我说的第一参数不能是目录不太准确。 第一参数是目录的话,只能在同一分区下(windows)。

FileUtils.mv "r:/x","r:/y"

x 为目录。 结果有 2 中情况:

  1. 如果 y 不存在,则直接把 x 改名为 y. 2 如果 y 存在,这会把 x 移动到 y 目录下。R:/y/x 我测试的平台是 windows xp, ruby1.9.2-p0

你应该是往别的盘上移动文件夹吧?才会出现 Permission denied

#13 楼 @413472212 那就这样呗: 先拷贝到目的目录,然后再删除原来的目录内容,不就行了。

require 'fileutils'

FileUtils.cp_r "r:/t","k:/"
FileUtils.remove_dir "r:/t"

t 是已存在的目录,把 t 目录内容拷贝到 K 盘下,然后删除 r 盘下的 t 目录内容。

#16 楼 @skandhas 成功了,但为什么 ruby 不能跨区移动目录呢?

#17 楼 @413472212 这个行为和 windows 有关。在 windows 下,MoveFile这个 api,官方是有说明的: The one caveat is that the MoveFile function will fail on directory moves when the destination is on a different volume. 如果跨分区移动目录,需要使用MoveFileEx这个 api。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号