根据the answer to this question,我尝试通过重命名来备份文件,然后将其替换为带有旧名称的新修改文件。
根据评论和文档here,我使用以下代码行:
File.rename(File.basename(modRaw), File.basename(modRaw)+'.bak')
但是,当我这样做时,我在运行时收到以下错误:
程序然后中止。 (leatherReplacer.rb是我的程序的名称,第88行是上面的代码行)
如何让我的程序重命名成功运行所需的文件?
答案 0 :(得分:2)
Windows有一些关于权限的特殊规则。在这里工作的重要一点是操作系统在文件打开时阻止移动或重命名文件。
根据代码的性质(大小和范围)以及您尝试备份的文件的重要性,以这样的方式重构代码可能是不可行的或者不值得的。可能。
答案 1 :(得分:1)
您可能不希望在那里调用File.basename
,剥离目录:
返回* file_name *中给出的文件名的最后一个组件,它必须使用正斜杠(“/”)形成,而不管本地文件系统上使用的分隔符。
所以,如果modRaw
是/where/is/pancakes.house
,那么你就说:
File.rename('pancakes.house', 'pancakes.house.bak')
但是pancakes.house
可能不在脚本的当前目录中。尝试没有File.basename
来电:
File.rename(modRaw, modRaw + '.bak')
答案 2 :(得分:1)
如果您是该文件的所有者,请使用File.chmod设置所需的permissions。
答案 3 :(得分:0)
我对ruby知之甚少,但您是否可以在命令行/ bash下使用管理员权限运行它,例如“以管理员身份运行”或“以root身份运行”?
根据Objectmix和ruby-forum,您应该将其设置为755或+ x,然后可能会将其设为自己。
答案 4 :(得分:0)
尝试使用完整文件路径e.t. File.rename('c:\ pancakes.house','c:\ pancakes.house.bak')
在win7中我遇到同样的问题