如何截断Prolog中的文件长度?如何截断Prolog中的文件长度?
我只在ISO 标准中找到set_stream_position/2
谓词。但是我在主要的Prolog系统中找不到set_stream_length/2
谓词 。
同样有一个流属性position/1
,但我 没有看到任何length/1
流属性。后者 将有助于使用set_stream_length/2
。
解决方法是什么?
再见
如何截断Prolog中的文件长度?如何截断Prolog中的文件长度?
我只在ISO 标准中找到set_stream_position/2
谓词。但是我在主要的Prolog系统中找不到set_stream_length/2
谓词 。
同样有一个流属性position/1
,但我 没有看到任何length/1
流属性。后者 将有助于使用set_stream_length/2
。
解决方法是什么?
再见
我想我明白了!
看到this页... @false评论后
编辑,这里的封装代码草图:
set_file_size(Path, Size) :-
setup_call_cleanup(
open(Path, update, S),
( stream_property(S, reposition(true)),
% stream_property(S, position(Q)),
% set_stream_position(S, Q),
seek(S, Size, bof, Size),
set_end_of_stream(S)
),
close(S)).
这工作,而是依赖于seek/4内置。我无法完全确定此类呼叫WRT ISO合规性的状态。它在ISO IO上市,但是未标记为兼容...
这2个注释行提供给我检查不透明项位置/ 1。有一个stream_position_data查询值。
先查找然后设置eof。 Oki Doki。 –
你想'set_stream_length/2'吗?为什么这个操作一般与流相关? – false
这里有几个问题:'长度'是指字节数(C/Java)与字符数;该操作的有效性(当它削减多字节字符的一部分时);以及这只对文件有意义的事实。 – false
如果您使用'stream_property/2'获取的位置,'set_stream_position/2'只能很好地定义。你不能对此做出任何假设,除非它是一个基础术语,并且它唯一标识了某个位置。 – false