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

Project1

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

发个复制文件的脚本

 关闭 [复制链接]

Lv4.逐梦者

梦石
0
星屑
12946
在线时间
1047 小时
注册时间
2007-12-15
帖子
188
跳转到指定楼层
1
发表于 2007-12-15 23:15:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
专门用来复制文件的脚本,没有找到 RGSS 中复制文件的方法又需要用到,只好自己动手写一个了。


  1. #==============================================================================
  2. # ■ file_copy        文件复制    by 洛克人SZ
  3. #------------------------------------------------------------------------------
  4. #  用来复制文件的类。
  5. #  使用方法:file_copy("要复制的文件", "目标文件")
  6. #  效率很低,复制一个2M多的文件用了1分钟。
  7. #  主要用来复制一些小文件(存档中的截图)。
  8. #  没有找到RGSS中复制文件的方法才写的这个类,用了最简单的方法
  9. #      实现了文件复制的功能。
  10. #  不太会写说明……
  11. #==============================================================================

  12. def file_copy(filename1, filename2)
  13.   # 判断源文件是否存在
  14.   if FileTest.exist?(filename1)
  15.     # 如果目标文件存在则删之,用来避免一些讨厌的问题
  16.     File.delete(filename2) if FileTest.exist?(filename2)
  17.     # 打开源文件
  18.     ofile = File.open(filename1, "rb")
  19.     # 建立临时数据变量数组
  20.     tdata = []
  21.     # 初始化计数用变量
  22.     cou = 0
  23.     # 读取源文件 (每次读入 1 字节)
  24.     ofile.each_byte { |f|
  25.       # 计数 + 1
  26.       cou += 1
  27.       # 将读出的数据添加进临时数据数组
  28.       tdata.push(f.chr)
  29.       # 每读出一万个字节更新一下画面,避免 10s 问题
  30.       if cou == 10000
  31.         # 更新画面
  32.         Graphics.update
  33.         # 计数清零
  34.         cou = 0
  35.       end
  36.     }
  37.     # 打开目标文件
  38.     nfile = File.open(filename2, "wb")
  39.     # 初始化计数用变量
  40.     cou = 0
  41.     # 循环
  42.     for i in 0...tdata.size
  43.       # 计数 + 1
  44.       cou += 1
  45.       # 将临时数据数组中的数据写入目标文件
  46.       nfile.write(tdata[i])
  47.       # 每写入一万个字节更新一下画面,避免 10s 问题
  48.       if cou == 10000
  49.         # 更新画面
  50.         Graphics.update
  51.         # 计数清零
  52.         cou = 0
  53.       end
  54.     end
  55.     # 清除临时变量数据
  56.     tdata = nil
  57.     # 关闭源文件与目标文件
  58.     ofile.close
  59.     nfile.close
  60.     # 返回结果
  61.     return "复制完成!"
  62.   # 源文件不存在的情况下
  63.   else
  64.     # 返回结果
  65.     return "源文件未找到!"
  66.   end
  67. end
复制代码




以下为66提供教程
test = Win32API.new('kernel32', 'CopyFileA',%(p p l), 'l')
p test.call("game.ini", "faint.ini", 0)
使用:
xxxx = Win32API.new('kernel32', 'CopyFileA',%(p p l), 'l')
xxx = xxxx.call("原文件(相对)", "目标(相对)", 0)
p xxx

正在研究自己编写 DLL 来调用 DirectX ……DLL 完成了,脚本却遇到问题了……

Lv4.逐梦者

梦石
0
星屑
12946
在线时间
1047 小时
注册时间
2007-12-15
帖子
188
2
 楼主| 发表于 2007-12-15 23:15:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
专门用来复制文件的脚本,没有找到 RGSS 中复制文件的方法又需要用到,只好自己动手写一个了。


  1. #==============================================================================
  2. # ■ file_copy        文件复制    by 洛克人SZ
  3. #------------------------------------------------------------------------------
  4. #  用来复制文件的类。
  5. #  使用方法:file_copy("要复制的文件", "目标文件")
  6. #  效率很低,复制一个2M多的文件用了1分钟。
  7. #  主要用来复制一些小文件(存档中的截图)。
  8. #  没有找到RGSS中复制文件的方法才写的这个类,用了最简单的方法
  9. #      实现了文件复制的功能。
  10. #  不太会写说明……
  11. #==============================================================================

  12. def file_copy(filename1, filename2)
  13.   # 判断源文件是否存在
  14.   if FileTest.exist?(filename1)
  15.     # 如果目标文件存在则删之,用来避免一些讨厌的问题
  16.     File.delete(filename2) if FileTest.exist?(filename2)
  17.     # 打开源文件
  18.     ofile = File.open(filename1, "rb")
  19.     # 建立临时数据变量数组
  20.     tdata = []
  21.     # 初始化计数用变量
  22.     cou = 0
  23.     # 读取源文件 (每次读入 1 字节)
  24.     ofile.each_byte { |f|
  25.       # 计数 + 1
  26.       cou += 1
  27.       # 将读出的数据添加进临时数据数组
  28.       tdata.push(f.chr)
  29.       # 每读出一万个字节更新一下画面,避免 10s 问题
  30.       if cou == 10000
  31.         # 更新画面
  32.         Graphics.update
  33.         # 计数清零
  34.         cou = 0
  35.       end
  36.     }
  37.     # 打开目标文件
  38.     nfile = File.open(filename2, "wb")
  39.     # 初始化计数用变量
  40.     cou = 0
  41.     # 循环
  42.     for i in 0...tdata.size
  43.       # 计数 + 1
  44.       cou += 1
  45.       # 将临时数据数组中的数据写入目标文件
  46.       nfile.write(tdata[i])
  47.       # 每写入一万个字节更新一下画面,避免 10s 问题
  48.       if cou == 10000
  49.         # 更新画面
  50.         Graphics.update
  51.         # 计数清零
  52.         cou = 0
  53.       end
  54.     end
  55.     # 清除临时变量数据
  56.     tdata = nil
  57.     # 关闭源文件与目标文件
  58.     ofile.close
  59.     nfile.close
  60.     # 返回结果
  61.     return "复制完成!"
  62.   # 源文件不存在的情况下
  63.   else
  64.     # 返回结果
  65.     return "源文件未找到!"
  66.   end
  67. end
复制代码




以下为66提供教程
test = Win32API.new('kernel32', 'CopyFileA',%(p p l), 'l')
p test.call("game.ini", "faint.ini", 0)
使用:
xxxx = Win32API.new('kernel32', 'CopyFileA',%(p p l), 'l')
xxx = xxxx.call("原文件(相对)", "目标(相对)", 0)
p xxx

正在研究自己编写 DLL 来调用 DirectX ……DLL 完成了,脚本却遇到问题了……

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

3
发表于 2007-12-15 23:18:21 | 只看该作者
-_-bbb
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

心无天使

梦石
0
星屑
49
在线时间
0 小时
注册时间
2007-12-15
帖子
1016
4
发表于 2007-12-16 01:27:05 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

5
发表于 2007-12-16 01:42:21 | 只看该作者
do loop
读一个字节
记录
村一个字节
end
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12946
在线时间
1047 小时
注册时间
2007-12-15
帖子
188
6
 楼主| 发表于 2007-12-16 02:39:32 | 只看该作者
以下引用yangff于2007-12-15 17:42:21的发言:

do loop
读一个字节
记录
村一个字节
end


用这个方法会不断读写,复制时不太安全。还是先全部读到内存中更好,毕竟只是用来复制小文件的。

以下引用Eclair于2007-12-15 17:27:05的发言:

用了一些专业知识...偶不明白了。


其实也没用什么专业知识,就是用 .each_byte 方法加 .chr 方法将文件中的每个字节读出来并转换为字符,再用 .write 方法写入新文件,原理其实很简单……

另外,这个脚本稍加修改后可以直接生成文件……

正在研究自己编写 DLL 来调用 DirectX ……DLL 完成了,脚本却遇到问题了……
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

7
发表于 2007-12-16 02:43:41 | 只看该作者
以下为66提供教程
test = Win32API.new('kernel32', 'CopyFileA',%(p p l), 'l')
p test.call("game.ini", "faint.ini", 0)
使用:
xxxx = Win32API.new('kernel32', 'CopyFileA',%(p p l), 'l')
xxx = xxxx.call("原文件(相对)", "目标(相对)", 0)
p xxx
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12946
在线时间
1047 小时
注册时间
2007-12-15
帖子
188
8
 楼主| 发表于 2007-12-16 02:53:27 | 只看该作者
以下引用yangff于2007-12-15 18:43:41的发言:

以下为66提供教程
test = Win32API.new('kernel32', 'CopyFileA',%(p p l), 'l')
p test.call("game.ini", "faint.ini", 0)
使用:
xxxx = Win32API.new('kernel32', 'CopyFileA',%(p p l), 'l')
xxx = xxxx.call("原文件(相对)", "目标(相对)", 0)
p xxx


{/ll}早知道有这个方法就好了。

正在研究自己编写 DLL 来调用 DirectX ……DLL 完成了,脚本却遇到问题了……
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

心无天使

梦石
0
星屑
49
在线时间
0 小时
注册时间
2007-12-15
帖子
1016
9
发表于 2007-12-16 05:36:40 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

心无天使

梦石
0
星屑
49
在线时间
0 小时
注册时间
2007-12-15
帖子
1016
10
发表于 2008-1-26 05:37:25 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 21:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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