将条目解压缩到Racket中的内存中
我正试图读取一个文件条目。我现在的计划是:将条目解压缩到Racket中的内存中,racket,unzip,Racket,Unzip,我正试图读取一个文件条目。我现在的计划是: #朗球拍 (需要文件/解压缩) (需要xml) (定义(获取内容文件名) (let([in(打开输入文件名#:mode'binary)]) (在中解压缩条目) (在中读取zip目录) #“content.xml”)) 当前程序将一个文件content.xml写入文件系统。但我需要将其存储在内存中(作为输出端口、字符串或某些返回值),而不是污染文件系统。你能告诉我怎么做吗?虽然我没有使用文件/解压,但从阅读文档来看,它看起来不像是为支持你想要的东西而设
#朗球拍
(需要文件/解压缩)
(需要xml)
(定义(获取内容文件名)
(let([in(打开输入文件名#:mode'binary)])
(在中解压缩条目)
(在中读取zip目录)
#“content.xml”))
当前程序将一个文件
content.xml
写入文件系统。但我需要将其存储在内存中(作为输出端口、字符串或某些返回值),而不是污染文件系统。你能告诉我怎么做吗?虽然我没有使用文件/解压
,但从阅读文档来看,它看起来不像是为支持你想要的东西而设计的
我所能想到的就是显而易见的解决方法:让解压条目
将文件写入系统临时目录(使用(find system path'temp dir)
获取其位置),打开它,然后读入内存。然后,要么删除文件
,要么让系统像通常删除临时文件一样将其删除
更新:
看起来我昨晚读文档时很累,并且误解了使用
makefilesystem entry reader
是必需的,而不是为了方便。当然解压条目
可以使用任何函数(字节?布尔值?输入端口?->.any)
。相反,请查看Chris的答案。是的,您可以通过将自定义的条目读取器
参数传递到解压条目
来执行此操作。下面是一个如何执行此操作的示例:
(定义(解压条目->字节路径zipdir条目)
(使用输出字节调用
(兰姆达(外)
(解压缩条目路径zipdir条目)
(lambda(名称dir?in)
(复制端口输入输出(()())))