secondsen 发表于 2009-1-18 01:49:25

我给文件改名字错在哪了?

names = Dir.entries(".")
for i in 2...87
File.rename(names,names.gsub!(/\[(+)\]/i,''))
end


以上。。。我就想去掉文件名中的等等

报错


rename.rb:3:in `rename': No such file or directory - 10_black.gif or 10_black.gif (Errno::ENOENT)
    from rename.rb:3
    from rename.rb:2:in `each'
    from rename.rb:2

文件名"10_black.gif"

似乎应该用names.each{|name|    }哈

shawind 发表于 2009-1-18 10:01:31

rename.rb:3:in `rename': No such file or directory - 10_black.gif or 10_black.gif (Errno::ENOENT)

是没有找到 10_black.gif这个文件,怎么回事?

还有,这里没有错误检测。
如果有文件名中没有这类东西,rename(names,names.gsub!(/\\[(+)\\]/i,''))就会报错。

还有在for循环里,names.gsub(...)运行在先,
他已经先把文件名从10_black.gif改成了10_black.gif,也就是说这时names的值已经为10_black.gif。
然后才运行rename(names,...),names的值已经是10_black.gif了,而是本来的文件名应该是10_black.gif,
当然就显示找不到这个文件了。
申明个变量提前缓存一下,应该就没事了。

secondsen 发表于 2009-1-18 10:31:16

我是想把10_black.gif    改成10_black.gif    这么写咋会错呢?

rename(oldname,newname)不是么

secondsen 发表于 2009-1-18 10:46:30

我知道了。。。。我用的是gsub! 这样原本给的"10_black.gif" 会改变成 "10_black.gif"文件架下当然没有这个文件。。。把gsub!改成gsub就好了

引用楼主secondsen于2009-01-18 01:49发表的 我给文件改名字错在哪了? :
X.each{|name|    }

ruby的这个玩意真是个好东西

得。。。。咱俩一起发现的

shawind 发表于 2009-1-18 11:09:42

还是上次听说rails可以方便的用flex时,才抱的佛脚,结果最后发现,rails的mvc结构根本不能全用在flash上。
于是,很久不用ruby了。本来就没怎么学,现在更是忘记得差不多了,

secondsen 发表于 2009-1-18 13:20:04

我完全为了RM。。。。但是发现还可以干点小零活

ravenex 发表于 2009-1-19 14:19:26

大大要直接Dir.entries之后each的话,会遇到.和..。简单写可以grep出不是点开头的:
Dir.entries('.').grep(/^[^.]/) do |name|
# ...
end
然后正则表达式里/\\[(+)\\]/i的括号是多余的因为大大后面没用到它捕获的内容,i也是多余的因为这个正则表达式里根本没可以区分大小写的字符,是繁琐的因为\\d就是。直接/\\[\\d+\\]/就好。

secondsen 发表于 2009-1-19 23:03:47

强烈感谢LS的。。。我这就去补习正则表达式去。。。。。泪奔。。。。。

其实这一段我是从RM里直接复制出来的
页: [1]
查看完整版本: 我给文件改名字错在哪了?