有没有一种方法可以使用SML Basis库在特定位置打开文件?也就是说,使用操作系统调用来更改位置,而不是扫描文件并丢弃数据。用SML搜索文件基础
5
A
回答
7
这很棘手。不幸的是,寻求并不直接支持。此外,文件位置对于二进制文件而言只是透明的,即用BinIO
结构[1]打开的文件位置。对于这种结构,相应的类型BinIO.StreamIO.pos
被定义为Position.int
,这是一些整数类型。
然而,在支持从标准的完整的I/O堆栈的SML系统,你应该能够合成以下使用较低的I/O层寻求功能:
(* seekIn : BinIO.instream * Position.int -> unit *)
fun seekIn(instream, pos) =
case BinIO.StreamIO.getReader(BinIO.getInstream instream) of
(reader as BinPrimIO.RD{setPos = SOME f, ...}, _) =>
(f pos;
BinIO.setInstream(instream,
BinIO.StreamIO.mkInstream(reader, Word8Vector.fromList[]))
)
| (BinPrimIO.RD{name, ...}, _) =>
raise IO.Io{
name = name,
function = "seekIn",
cause = IO.RandomAccessNotSupported
}
这样使用它:
val file = BinIO.openIn "filename"
val _ = seekIn(file, 200)
val bin = BinIO.inputN(file, 1000)
如果您需要转换从Word8Vector到字符串:
val s = Byte.bytesToString bin
您也可以为流出流做同等处理。
4
如果你能设法得到了reader/writer的保持,那么就应该有getPos
,setPos
和endPos
功能,这取决于哪一种您正在处理的读/写的。
相关问题
- 1. 搜索基础URL
- 2. sharepoint 2010基础搜索不起作用
- 3. 深度优先搜索基础知识
- 4. MySQL的搜索行的基础并
- 5. 坐标为基础的搜索
- 6. 搜索引擎中的基础词
- 7. Zurb基础顶部栏搜索输入
- 8. MongoDB的父文档的搜索结果的基础上,选择子文件
- 9. 搜索基于标签优先的基础上
- 10. 删除文件的基础
- 11. 文件I/O基础
- 12. SML中的二叉搜索树
- 13. 使用scrapy为基础的多个搜索选项网站
- 14. 使用PHP搜索带有分页的LDAP基础
- 15. 如何使用基础适配器创建搜索
- 16. 使用nHibernate实现灵活的搜索基础架构
- 17. 基于外部文件搜索亮点
- 18. 用grunt-sass编译基础sass文件
- 19. 是标准sml基础库中的zip函数吗?
- 20. 检索轨道基础URL
- 21. 铸件基础通用类
- 22. 搜索文件
- 23. 搜索文件
- 24. 搜索文件
- 25. 搜索文件?
- 26. 如何使用搜索:搜索API在txt文件中搜索?
- 27. 必应网页搜索API v5.0的基础知识
- 28. 在garyub的基础上搜索SonarQube项目Uri
- 29. 数组压缩和C++搜索(基础知识)
- 30. 如何在ping federate中提供多个搜索基础?
尼斯的答案!但是我只是想知道......如果我要以一种随机的方式读取一个文件(寻找相对较长的距离然后读取小块),它实际上来回遍历整个IO栈(命令/流/原语IO)值得,或者直接简单地使用'BinPrimIO.reader'会更好一些? – pyon 2013-05-12 01:55:15
@EduardoLeón,我没有看到直接使用底层接口的任何特别优势。高层次更方便,更高效(缓冲和全部)。 – 2013-05-12 07:15:05