幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2923|回复: 7

[其他] 我给文件改名字错在哪了?

[复制链接]

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2009-1-18 01:49:25 | 显示全部楼层 |阅读模式
  1. names = Dir.entries(".")
  2. for i in 2...87
  3.   File.rename(names[i],names[i].gsub!(/\[([0-9]+)\]/i,''))
  4. end
复制代码

以上。。。我就想去掉文件名中的[1]  [2]  等等

报错


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[1].gif"

似乎应该用names.each{|name|    }哈
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 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这个文件,怎么回事?

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

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

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-1-18 10:31:16 | 显示全部楼层
我是想把  10_black[1].gif    改成  10_black.gif    这么写咋会错呢?

rename(oldname,newname)不是么
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-1-18 10:46:30 | 显示全部楼层
我知道了。。。。我用的是gsub! 这样原本给的"10_black[1].gif" 会改变成 "10_black.gif"文件架下当然没有这个文件。。。把gsub!改成gsub就好了
引用楼主secondsen于2009-01-18 01:49发表的 我给文件改名字错在哪了? :
X.each{|name|    }

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

得。。。。咱俩一起发现的
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2009-1-18 11:09:42 | 显示全部楼层
还是上次听说rails可以方便的用flex时,才抱的佛脚,结果最后发现,rails的mvc结构根本不能全用在flash上。
于是,很久不用ruby了。本来就没怎么学,现在更是忘记得差不多了,
え~え~お!!!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-1-18 13:20:04 | 显示全部楼层
我完全为了RM。。。。但是发现还可以干点小零活
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

0

主题

25

帖子

254

积分

③业余

积分
254
发表于 2009-1-19 14:19:26 | 显示全部楼层
大大要直接Dir.entries之后each的话,会遇到.和..。简单写可以grep出不是点开头的:
  1. Dir.entries('.').grep(/^[^.]/) do |name|
  2.   # ...
  3. end
复制代码

然后正则表达式里/\\[([0-9]+)\\]/i的括号是多余的因为大大后面没用到它捕获的内容,i也是多余的因为这个正则表达式里根本没可以区分大小写的字符,[0-9]是繁琐的因为\\d就是[0-9]。直接/\\[\\d+\\]/就好。
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-1-19 23:03:47 | 显示全部楼层
强烈感谢LS的。。。我这就去补习正则表达式去。。。。。泪奔。。。。。

其实这一段我是从RM里直接复制出来的
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 03:54 , Processed in 0.023043 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表