将条目解压缩到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)
(复制端口输入输出(()())))