簡體   English   中英

我如何讀取文件,而不將其加載到內存中,例如D中的Delphi TFileStream類?

[英]How do I read a file, wihout loading it into the memory, like the Delphi TFileStream class in D?

我在某處讀取到std.stdio的文件將文件加載到內存中,然后讀取該文件。 我來自Delphi,那里有一個TFileStream類,該類可用於讀取/寫入文件,而無需將其加載到內存中。 在寫/讀時,我不必擔心行尾或任何特殊字符,我可以提供我想讀/寫的字節數,甚至可以讀/寫字節數組,我不確定std.stdio.File是否具有它。

D中也可能嗎? 我只想從文件中讀取一個字節,從我提供的位置讀取,而不要將整個文件加載到內存中(文件很大)? 如果是,那怎么辦? 還有一件事,我必須將文件讀取為ubytes(0-255)數組

PS:該方法應該在Linux上有效,Windows不是我的目標;

您想要的是File,並使用seek和rawRead / rawWrite方法。 它只是包裝了c庫,在這里沒什么花哨的。

D標准庫中沒有任何模塊可以執行您所說的“ 在某處讀取 ”的內容。 但是, std.file模塊中有一個函數可用於讀取整個文件std.file ()函數 該函數具有簽名void[] read(R)(R name, size_t upTo = size_t.max) ,可用於讀取upTo字節數。 自然,如果省略upTo參數,它將讀取整個文件(或填滿您的內存!)。

正如Richard所建議的那樣,請使用std.stdio模塊中的File包裝器執行任意seek()和read()操作。

如果文件很大,最好使用std.mmfile 這是非常方便,並允許您處理內存映射文件像是一個片(陣列)... SO線程相關

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM