如何在Marklogic中获取文本文件大小

问题描述 投票:0回答:1

我需要在 MarkLogic 中获取文本文件大小。我正在阅读日志文件,我想知道日志在特定日期增长了多少。

下面是我写的代码:

xquery version "1.0-ml";

declare function local:convertToKilobytes($sizeInCharacters as xs:integer) as xs:decimal 
{
 $sizeInCharacters * 2 div 1024
};

let $error-log := "C:\Program Files\MarkLogic\Data\Logs\ErrorLog.txt"
let $logLines := fn:tokenize(xdmp:filesystem-file($error-log), '\r?\n')
let $uniqueDates := distinct-values(
                    for $line in $logLines
                    let $logDate := fn:substring($line, 1, 10) 
                    where $logDate ne ''
                   return $logDate
                                  )
let $currentSize := sum(for $line in $logLines return string-length($line))

let $logEntries := 
                for $date in $uniqueDates
                let $sizeInCharacters := sum(for $l in $logLines where fn:contains($l, $date) return string-length($l))
                let $sizeInKilobytes := local:convertToKilobytes($sizeInCharacters)
                return
                <log-entry date="{$date}" size-in-kilobytes="{$sizeInKilobytes}"/>

return
<log-growth>{ $logEntries }</log-growth>

从上面的代码我得到的结果是:

<log-growth>
  <log-entry date="2023-09-11" size-in-kilobytes="75.05859375">
  </log-entry>
</log-growth>

当我通过左键单击文件检查系统然后转到属性时,它显示磁盘大小:128 KB 和大小:38 KB。那么为什么我没有得到系统显示的结果呢? MarkLogic 中是否有任何特定功能,以便我可以获得系统显示的结果?非常感谢任何建议。

xquery marklogic marklogic-10
1个回答
0
投票

您可以使用

xdmp:filesystem-file-length()
指向 ErrorLog.txt 文件:

xdmp:filesystem-file-length("C:\Program Files\MarkLogic\Data\Logs\ErrorLog.txt")

这将返回以字节为单位的大小,然后您可以转换为所需的单位。

© www.soinside.com 2019 - 2024. All rights reserved.