4

如何在 Prolog 中截断文件长度?

我只set_stream_position/2在 ISO 标准中找到一个谓词。set_stream_length/2但我在主要的 Prolog 系统中找不到谓词。

同样有一个流属性position/1,但我看不到length/1流属性。后者将有助于使用set_stream_length/2.

解决方法是什么?

再见

4

1 回答 1

1

我想我明白了!

看到这个页面...

在@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 条注释行有助于我检查不透明的术语 position/1。有一个stream_position_data来查询这些值。

于 2012-12-25T18:18:22.963 回答