[RGSS]RGStorage 1.00
介绍
RGStorage实现了一个通用的存储类,统一接口,可以从以下实际或虚拟文件系统来读写文件资料
- 文件系统
- ar文件
- RGSS加密系统(只读)。
并可以通过可选的扩展来读写
- 7z文件
- zip文件
- http://开头的资源
同时在以上的基础上重定义了require方法,也可以混入Object,使它能像普通的Ruby的require一样工作,但不局限于require具体文件,比如:
- require “http://codepad.org/abcdefgh/raw.rb”
- require “1.zip!/test.rb”
- require “RGSSAD://a.rb”
基本用法:
把一个类似于文件路径的字符串叫做资源标识符(resource identifier, rsrc_id)。
因为可以通过RGStorage::Active来重新设定关联,以下的用法的举例与默认关联有关。
1.RGStorage.get rsrc_id
取得资源的内容
- RGStorage.get “C:\\windows\\system32\\notepad.exe”#相当于直接读取notepad.exe
- RGStorage.get “extended.ar!/Sc330.exe” #从ar文件取得Sc330.exe,作为字符串返回
- RGStorage.get “http://example.com/sample.zip”#从http读取数据,需要扩展文件extended.ar
- RGStorage.get “<T>prefix”#取一个临时文件名,前缀是prefix,也就是返回”临时文件夹\\prefix0001″这样的形式
- RGStorage.get “a.zip!/a.png” # 从zip读数据,需要扩展(extended.ar)
2. RGStorage.set rsrc_id, content
设置资源的内容
- RGStorage.set “1.txt”, “Hello world” #相当于往1.txt里面写Hello world字符串
- RGStorage.set “mytest.ar!/1.txt”, “Hello world” #往ar文件里面某个项目写内容
- RGStorage.set “a.zip!/a.png”, “pngdata” #往zip里面某个文件写内容,需要扩展(extended.ar)
3. RGStorage.copyTo rsrc_id1, rsrc_id2
复制资源内容,相当于RGStorage.set(rsrc_id2, RGStorage.get(rsrc_id1))
- RGStorage.copyTo “1.txt”, “a.zip!/2.txt” #相当于添加/更新1.txt到a.zip,文件名改为2.txt
- RGStorage.copyTo “http://test.com/sample.exe”, “b.exe” #相当于下载文件
基本设置:
默认设置是:
1 2 3 4 5 6 | RGStorage::Active = RGController.new RGRouter.new [ [/\.ar!/, ArSystem], [/\.ar/, FileSystem, MarshalFormatter, ZlibFormatter], [/<T>.*/, TemporaryFile], [/\.*/, FileSystem] ] |
其中每一个设置的格式为,
[ 匹配条件, 文件系统, 转换器1, 转换器2, 转换器3,…]
匹配条件可以是正则表达式,范围,或者一个接受一个参数返回真假值的lambda/proc
文件系统是RGFileSystem类的实例,或者实现了get/set方法的对象,如果可以get/set一个rsrc_id,那么get/set的调用将返回一个lambda{|rsrc|}(get)或者lambda{|rsrc, content|}(set),否则应该返回nil,这是用来测试一个文件是否可读/可写
转换器也是实现了get/set方法的对象,或者RGFormatter类的实例,但get/set直接返回转换结果,比如MarshalFormatter的get方法是对输入(记为input)返回Marshal.load(input)的结果, 而set刚好相反。