设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4298|回复: 13
打印 上一主题 下一主题

[已经解决] 【求助帖】FileTest.directory?不支持中文的解决方案?

[复制链接]

Lv2.观梦者

铃铃塔的守护者

梦石
0
星屑
626
在线时间
961 小时
注册时间
2010-10-24
帖子
2768

贵宾

跳转到指定楼层
1
发表于 2010-12-23 22:27:51 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 px.凤翔九天 于 2010-12-26 12:11 编辑

发现FileTest.exist?不支持中文后在论坛上找到了紫苏的替换方法:FileTest.exists?  (多了个s,新定义的方法,支持中文)
现在使用删除目录的脚本时发现无法删除文件名为汉字的文件夹....会显示不存在....用FileTest.directory?判定中文文件夹也同样返回万恶的false...表示这样我没招了....
需要的是FileTest.directory?方法支持中文和让删除目录的脚本可以删除中文的目录(子目录)
(经过初步解析那个删除目录的写法貌似也是用了FileTest样式的方法(不完全一样)导致对中文无效。)
删除文件夹的写法的原地址:http://rpg.blue/forum.php?mod=vi ... =%E5%88%A0%E9%99%A4

求高手解答。

Lv2.观梦者

铃铃塔的守护者

梦石
0
星屑
626
在线时间
961 小时
注册时间
2010-10-24
帖子
2768

贵宾

14
 楼主| 发表于 2010-12-26 14:20:42 | 只看该作者
本帖最后由 px.凤翔九天 于 2010-12-26 14:27 编辑

回复 苏小脉 的帖子

恩,好使了啊...谢谢。
话说我问的问题总是你们几个搞定啊....

魔法麻将独立游戏制作中,欢迎热情的测试员与UI设计师合作开发~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
953 小时
注册时间
2007-4-25
帖子
805
13
发表于 2010-12-26 14:15:11 | 只看该作者
回复 px.凤翔九天 的帖子

这个删除方法是调用 Windows Shell,递归调用的过程都是 API 内部处理的。理论上当然可以用 DeleteFile 等函数手动去迭代。

检测是否为目录:
  1. find_first_file = Win32API.new('kernel32', 'FindFirstFileW', 'pP', 'i')

  2. cwd = Dir.getwd.gsub!(/\//, '\\')
  3. src = "#{cwd}\\测试目录"

  4. win32_find_data = ' ' * 592
  5. find_first_file.call(src.to_unicode, win32_find_data)
  6. file_attr = win32_find_data.unpack('L')[0]

  7. if 0 != (file_attr & 0x10)
  8.   print "`#{src}' 是一个目录"
  9. else
  10.   print "`#{src}' 是一个文件"
  11. end
复制代码

评分

参与人数 1星屑 +510 收起 理由
fux2 + 510 认可答案

查看全部评分

[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv2.观梦者

铃铃塔的守护者

梦石
0
星屑
626
在线时间
961 小时
注册时间
2010-10-24
帖子
2768

贵宾

12
 楼主| 发表于 2010-12-26 11:30:02 | 只看该作者
本帖最后由 px.凤翔九天 于 2010-12-26 12:05 编辑

回复 苏小脉 的帖子

原来如此啊....万恶的函数....
不管怎么说找到一半答案了,谢谢。
为什么说是一半呢...因为可以删除文件夹了(原理貌似是用空代替原来的文件夹,不是迭代删除)
但是检测是否为目录的问题依旧没搞定......
要是可以的话帮我把那个也搞定了。
(抱怨一句:为什么这个世界上存在那么多编码啊....)

魔法麻将独立游戏制作中,欢迎热情的测试员与UI设计师合作开发~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
953 小时
注册时间
2007-4-25
帖子
805
11
发表于 2010-12-26 10:25:06 | 只看该作者
  1. class String
  2.     @@mb2wc = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  3.     def to_unicode
  4.         len = @@mb2wc.call(65001, 0, self, -1, 0, 0) << 1
  5.         buf =" " * len
  6.         @@mb2wc.call(65001, 0, self, -1, buf, len)
  7.         return buf
  8.     end
  9. end

  10. sh_file_operation = Win32API.new('shell32', 'SHFileOperationW', 'P', 'i')

  11. cwd = Dir.getwd.gsub!(/\//, '\\')
  12. src = "#{cwd}\\测试目录\0"

  13. op_struct = [0, 3, src.to_unicode, 0, 4 | 0x10 | 0x0200, 0, 0, 0].pack('iIplSiii')
  14. sh_file_operation.call(op_struct)
复制代码
“测试目录”是希望删除的目录名,和上次一样,如果是相对于工程根目录才需要前面的 #{cwd}。

Ruby 官方实现有关文件的操作调用的大多数是 POSIX 标准的 I/O 函数,比如 Dir.foreach 就用的是 POSIX 的 opendir 函数,这些函数自然是不支持 UTF-8 的。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1130
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

10
发表于 2010-12-26 03:54:54 | 只看该作者
本帖最后由 禾西 于 2010-12-26 04:07 编辑

發現漢字不是重點= =

:如何創建一個空文檔?
       |Dir.mkdir("路徑")
        路徑的類型一定要是 String,否則就會出錯
        格式需要爲 /.../...的樣子
        
        如果需要在 RM 目錄下建立新的文檔,就需要調用這樣的語句
       |Dir.mkdir('./new_document')
        這裏需要注意的是「.」,這個東西就是指示在自身目錄路徑下建立一個空文檔(子路徑)
        如果沒有「.」
        比如
       |Dir.mkdir('/new_document')
        文檔就不知道會飛到哪里去 Orz。完全找不到了
        雖然存在於某處,不過用 window 的search 功能找不出來
        
        如果同名(主要指同路徑)文檔已經存在,系統會發生錯誤
        Errno::EEXIST異常 File Exist
:如何删除一個文檔?
        删除文檔以前需要確認文檔爲空
        成功的話會返回 0
       |Dir.delete("./new_document") #=> 0
        否則就引起 Errno::ENOTEMPTY異常 File NotEmpty
        
        Ruby 提供了三個功能一樣的方法:
       |Dir.delete("路徑")
       |Dir.rmdir("路徑")
       |Dir.unlink("路徑")
        彼此之間沒有分別,隨便挑選一個用。(.delete 比較好記)

:如何查看一個文檔當中包含的文件?
       |Dir.entries("路徑")
       |Dir.new("路徑").to_a
       |Dir.open("路徑").to_a
       |Dir.open("路徑"){|dir|dir.to_a}
        以上四個方法都是一樣的
        都會返回目錄下所有文件的名字(String 格式),幷整合到一個數組當中
        比如:
       |Dir.open('.') #=>[".","..","Data","Game.exe","Game.ini","Game.rxproj","Audio","Graphics"]

点评

我就是用这个……结果删了等于没删……沒报错……脚本也有很好的执行……现在纠结了……  发表于 2010-12-26 11:36
……= =  发表于 2010-12-26 08:19
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2010-12-13
帖子
31
9
发表于 2010-12-26 00:00:29 | 只看该作者
此问题无人会吗...不要啊....
回复 支持 反对

使用道具 举报

Lv2.观梦者

铃铃塔的守护者

梦石
0
星屑
626
在线时间
961 小时
注册时间
2010-10-24
帖子
2768

贵宾

8
 楼主| 发表于 2010-12-25 11:15:30 | 只看该作者
话说这个就不是为游戏设计的....还是汉语更方便啊...
这个是为我爹做个检索程序(rm做的......)时遇到的问题啊....没办法...如果还是找不到方法...额,估计就得去掉备份文件和按创建时间分类管理文件的功能了....唉
ruby的功能有限啊....等我ruby学的差不多,考虑学一下c++什么的吧。
最好是能解决问题...至于不能删除顶目录?是吗。如果不用汉字的话可以,假如用汉字的话的确删不掉(子目录用汉字就删不掉)
继续求解。

魔法麻将独立游戏制作中,欢迎热情的测试员与UI设计师合作开发~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

看不到我

梦石
0
星屑
50
在线时间
229 小时
注册时间
2005-11-6
帖子
1741

贵宾

7
发表于 2010-12-25 10:44:43 | 只看该作者
我觉得 如果自己做游戏的话,游戏文件尽量都做英文吧,比较好管理……
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7971
在线时间
1183 小时
注册时间
2007-7-29
帖子
2055
6
发表于 2010-12-25 09:10:10 | 只看该作者
回复 px.凤翔九天 的帖子

zh只是open吧,open的话不用那么麻烦,随便就可以了。
话说我稍微测试了一下……名字是没问题了……不过我的rm竟然没权限删除顶目录……纠结中……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-6-7 02:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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