gpt4 book ai didi

javascript - NODEJS SMB2 - 将缓冲区转换为日期和时间

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:15 26 4
gpt4 key购买 nike

我正在使用此包连接到共享目录( npm )。从原来的 smb2 fork 出来。

我正在尝试更改目录 readdir 函数(现在仅返回文件名)。所以我查看了 samba 返回的内容,我所能得到的“解析”是:

{ Index: 0,
CreationTime: <Buffer 05 6f bd 13 76 ba d1 01>,
LastAccessTime: <Buffer 05 6f bd 13 76 ba d1 01>,
LastWriteTime: <Buffer b8 e4 a8 09 c0 9f d1 01>,
ChangeTime: <Buffer 3e bd 43 17 c1 bc d1 01>,
EndofFile: <Buffer 57 12 00 00 00 00 00 00>,
AllocationSize: <Buffer 00 20 00 00 00 00 00 00>,
FileAttributes: 32,
FilenameLength: 16,
EASize: 0,
ShortNameLength: 0,
FileId: <Buffer 00 00 00 00 00 00 00 00>,
Filename: 'test.xxx' } ]

我可以通过 FileAttributes 识别文件和目录。但我需要获取 CreationTime、LastAccessTime、LastWriteTime。

从缓冲区的结构中我可以认识到我唯一需要做的就是将缓冲区转换为日期/时间。

所以我几乎尝试了一切。转换为utfucs2readUInt32LE(0)readUInt32BE(0)。我找到this (python 实现)该时间戳采用小端方式 unsingned long long (我不经常使用 python,但我认为 这意味着)。但在nodejs中没有这种类型。

我解析一个文件信息,如下所示 github.com/marsaud/node-smb2/blob/master/lib/messages/query_directory.js#L61

*编辑:所以我尝试了@gnerkus 解决方案,但它不起作用。返回这个

-4.377115596215621e-89 //readDoubleBE()
Thu Jan 01 1970 01:00:00 GMT+0100 (Central Europe Standard Time) //Date()

对于某些缓冲区,它返回无效日期。

Si我将长度缓冲区检查为Buffer.byteLength(obj.CreationTime),它返回8。很明显,缓冲区的长度为 8。所以我尝试使用返回以下内容的函数 readUInt8()

6.618094934489594e-300 //readUInt8()
Thu Jan 01 1970 01:00:00 GMT+0100 (Central Europe Standard Time) //Date()

最佳答案

所以,经过对 microsoft msd 和 npm 的长时间搜索。我发现缓冲区的长度是 64 位(8 字节)。它由 2 个双字组成。无缓冲整数的含义是FILETIME时间戳。

因此,如果我想从该缓冲区解析creationTime,我需要这样做:

buffer = v.LastWriteTime;
var low = buffer.readUInt32LE(0);
var high = buffer.readUInt32LE(4);
v.LastWriteTime = FileTime.toDate({low: low, high: high}).toISOString()

我希望它能对某人有所帮助。我使用 npm 插件 win32filetime 将 FILETIME 转换为 javascript Date Object

关于javascript - NODEJS SMB2 - 将缓冲区转换为日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com