2012-12-25 18 views
4

如何截斷Prolog中的文件長度?如何截斷Prolog中的文件長度?

我只在ISO 標準中找到set_stream_position/2謂詞。但是我在主要的Prolog系統中找不到set_stream_length/2謂詞 。

同樣有一個流屬性position/1,但我 沒有看到任何length/1流屬性。後者 將有助於使用set_stream_length/2

解決方法是什麼?

再見

+0

你想'set_stream_length/2'嗎?爲什麼這個操作一般與流相關? – false

+0

這裏有幾個問題:'長度'是指字節數(C/Java)與字符數;該操作的有效性(當它削減多字節字符的一部分時);以及這隻對文件有意義的事實。 – false

+0

如果您使用'stream_property/2'獲取的位置,'set_stream_position/2'只能很好地定義。你不能對此做出任何假設,除非它是一個基礎術語,並且它唯一標識了某個位置。 – false

回答

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查詢值。

+0

先查找然後設置eof。 Oki Doki。 –