Project1

标题: [内部函数问题]关于open [打印本页]

作者: 九靈    时间: 2013-8-22 22:26
标题: [内部函数问题]关于open
本帖最后由 九靈 于 2013-8-22 22:32 编辑

RM自带帮助:
open(file[, mode])
open(file[, mode]) {|io| ... }
打开 file 并返回 File 对象。mode 可以是下列字符串。省略时默认为 "r"。
"r": 以读取模式打开文件。
"w": 以写入模式打开文件。打开文件时,若文件已存在就清空文件内容。
"a": 以写入模式打开文件。通常把写入内容添加到文件结尾。
若有“+”的话,就以读写两用模式(RDWR)打开文件。
"r+": 将文件的读写位置设在开头。
"w+": 与 "r+" 一样,打开文件时,若文件已存在就清空其内容。
"a+": 与 "r+" 一样,打开文件时,若文件已存在,就把读写位置设在文件结尾。
可在上述任意一项后面添加“b”(如 "r+b")标志。此时,将以二进制方式打开文件。


问题就是红字!
1. 读写两用 : 有 "+" 号的区别
2. 二进制方式 : 一定要用二进制吗? 有没有加 "b"对存取有什么影响?
因为RGSS内部函数中 :
load_data(filename)
RUBY 代码复制
  1. File.open(filename, "rb") { |f|
  2.   obj = Marshal.load(f)
  3. }

以及
save_data(obj, filename)
RUBY 代码复制
  1. File.open(filename, "wb") { |f|
  2.   Marshal.dump(obj, f)
  3. }

都有加 "b"
还有
可以说下 r, r+, rb, r+b 的区别吗?
作者: kuerlulu    时间: 2013-8-22 22:47
这里的“+”其实是传说中的“一元加”,不是正常的计算符号,详细使用方法可以去参考一下C语言的说明。
“r+b”和“rb”是一样的方法,但是前者由于一元加符号自动变成2进制代码于是使用了2进制打开文件。
但是在脚本中可以把"rb"换成"r"+"b"这就是正常加号了(引号正常)。
作者: 九靈    时间: 2013-8-22 23:18
kuerlulu 发表于 2013-8-22 22:47
这里的“+”其实是传说中的“一元加”,不是正常的计算符号,详细使用方法可以去参考一下C语言的说明。
“r ...

那如果我要存个开关 switch[1] = true 是要用
file = File.open("switch.rxdata", "w") 还是
file = File.open("switch.rxdata", "wb")
Marshal.dump(switch[1], file)
file.close
另外读的时候
file = File.open("switch.rxdata", "r") 还是
file = File.open("switch.rxdata", "rb")  <== "wb" 是否要对应 "rb"
switch[1] = file
file.close


作者: kuerlulu    时间: 2013-8-22 23:25
其实大可不必写成这样,还多占一行
save_data(变量名, "路径和文件名")
变量名 = load_data("路径和文件名")


作者: 九靈    时间: 2013-8-22 23:29
kuerlulu 发表于 2013-8-22 23:25
其实大可不必写成这样,还多占一行
save_data(变量名, "路径和文件名")
变量名 = load_data("路径和文件名" ...

也是...
那如果硬要写成那样的话
w 和 wb
哪个好?
还是没差...
作者: 无脑之人    时间: 2013-8-23 08:16
建议使用save_data和load_data 不过在下试过r和w的 能够正常的读取和写入 至于什么二进制在下就不知道了= =




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1