有沒有一種方法可以使用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. sharepoint 2010基礎搜索不起作用
- 2. 座標爲基礎的搜索
- 3. MySQL的搜索行的基礎並
- 4. 深度優先搜索基礎知識
- 5. 搜索基於標籤優先的基礎上
- 6. SML中的二叉搜索樹
- 7. 如何使用基礎適配器創建搜索
- 8. 使用nHibernate實現靈活的搜索基礎架構
- 9. 使用scrapy爲基礎的多個搜索選項網站
- 10. 檢索軌道基礎URL
- 11. 搜索文件
- 12. MySQL查詢 - 重量爲基礎的搜索引擎
- 13. 必應網頁搜索API v5.0的基礎知識
- 14. 命令顯示整個行的基礎上在Linux搜索列?
- 15. 數組壓縮和C++搜索(基礎知識)
- 16. Twitter搜索 - 基於CSV的文本文件中的多個搜索
- 17. 搜索使用JSON文件
- 18. 用C搜索文件#
- 19. 使用c搜索文件#
- 20. 用PHP搜索XML文件?
- 21. 使用MATLAB搜索文件
- 22. VIM搜索 - FuzzyFinder搜索特定文件
- 23. Java文件行處理(基礎知識)
- 24. 三個js mtl文件基礎材料
- 25. 文件歸檔基礎知識
- 26. 視覺基礎Excel txt輸入文件
- 27. 文件格式的基礎知識
- 28. 使用搜索文件夾搜索正文字段
- 29. 使用文本作爲基礎從XPath檢索元素
- 30. 文件搜索C++
尼斯的答案!但是我只是想知道......如果我要以一種隨機的方式讀取一個文件(尋找相對較長的距離然後讀取小塊),它實際上來回遍歷整個IO棧(命令/流/原語IO)值得,或者直接簡單地使用'BinPrimIO.reader'會更好一些? – pyon 2013-05-12 01:55:15
@EduardoLeón,我沒有看到直接使用底層接口的任何特別優勢。高層次更方便,更高效(緩衝和全部)。 – 2013-05-12 07:15:05