【发布时间】:2014-01-28 09:38:36
【问题描述】:
TL;DR:32 位 emacs-lisp 字节范围能否超出文件的前 512 MB?
我喜欢将 emacs-lisp 用于各种数据处理任务,因为它(显然)与编辑器的高度集成。
在编写自定义函数时,我有时会遇到most-positive-fixnum 施加的限制。虽然我可以忍受并理解无法将整个 1GB 文件加载到缓冲区中的原因,但insert-file-contents[-literally] 接口也不允许访问文件前 512 MB 之外的数据块,因为它需要参数一个整数字节范围。
有没有办法绕过这个限制?据我所知,目前insert-file-contents 是 emacs-lisp 可用的最低级文件读取功能,insert-file-contents-literally 只是通过设置几个变量配置的第一个变体,即 emacs-lisp 似乎没有提供任何低级fopen 类型的文件接口。
奇怪的是,在某些时候(可能使用自编译的二进制文件)使用浮点参数调用 insert-file-contents-literally 对我有用,允许访问高字节范围,但代价是舍入错误的风险。但是,使用来自 ftp.gnu.org 的最新预编译 emacs 版本(撰写时为 24.3),这样做会产生 (wrong-type-argument file-offset NUMBER) 错误。
【问题讨论】:
-
看来你必须使用像
head和tail这样的外部命令,见emacswiki.org/emacs/VLF。在这种情况下,您可以摆弄emacs-calc任意精度数字。 -
使用外部命令可悲地引入了我想避免的平台依赖性;我主要在 Windows 上使用 emacs。
标签: file-io elisp filesize emacs24