2016-06-06 21 views
1

Ich benutze dieses Paket für die Verbindung zum freigegebenen Verzeichnis(). Gabel von Original smb2.NODEJS SMB2 - Puffer nach Datum und Uhrzeit konvertieren

Ich versuche, Verzeichnis readdir Funktion zu ändern (jetzt gibt nur Dateinamen zurück). So sah ich, was Samba kehrt ich alles, was ich kann „analysiert“ bekommen, ist dies:

{ 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' } ] 

ich Dateien und Verzeichnisse, die von Fileattributes erkennen kann. Aber ich brauche CreationTime, LastAccessTime, LastWriteTime.

Aus der Struktur des Puffers kann ich erkennen, dass nur die Sache, die ich tun muss, diese Puffer in Datum/Zeit konvertieren.

Also habe ich fast alles ausprobiert. Konvertieren in utf, ucs2, readUInt32LE (0), readUInt32BE (0). Ich finde this (Python-Implementierung), dass diese Zeitstempel in Little-Endian sind als unsingned lange lange (ich weiß nicht oft verwenden Python aber ich denke, < Q das bedeutet). Aber in Nodejs gibt es keinen solchen Typ.

ich analysieren eine Datei Informationen wie diese github.com/marsaud/node-smb2/blob/master/lib/messages/query_directory.js#L61

* Edit: Also habe ich versucht @gnerkus Lösung aber es würde nicht funktionieren. Gibt diese

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

Und für einige Puffer gibt es ungültiges Datum zurück.

Si geprüft I Länge Puffer als Buffer.byteLength (obj.CreationTime) und es kehrt . Es ist offensichtlich, dass Pufferlänge von 8 hat, also versuchte ich Funktion readUInt8() die

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

Antwort

1

So, nach langer Suche auf Microsoft MSD und Npm. Ich finde, dass der Puffer 64bites Länge (8bytes) ist. Es besteht aus 2 dwords. Die Bedeutung der ungepufferten Ganzzahl ist der Zeitstempel FILETIME.

Also wollte, wenn ich creation von diesem Puffer ich dies erforderlich analysieren tun:

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

ich es hoffe, dass jemand helfen würde. Ich benutzte npm plugun win32filetime FILE Javascript Datum Objekt

0

folgende Rücksendungen können Sie den Puffer mit buffer.readDoubleBE() lesen:

// This assumes the name of the object returned by smb2 is 'obj' 
var createdAt = new Date(obj.CreationTime.readDoubleBE()); 
+0

ich meine Antwort bearbeitet zu konvertieren. Überprüfen Sie bitte das :) –