2017-02-20 2 views
2

Python 3.6.0, 10 Fenster (64 Bit)os.path.getsize gibt falsche Größe der DLL-Datei in Windows 10

import os 
path = r'C:\Windows\System32\AdvancedInstallers\cmiv2.dll' 
print(os.path.getsize(path)) 

dieser Code gibt Ausgabe von 2193248 aber wenn ich sehe, die Eigenschaften dieses Datei es zeigen 3252576. Es ist nicht die Größe der Datenträgereigenschaft. Ich spreche von der tatsächlichen Größe.

file properties

Ich erwarte Python-Programm 3252576 zu drucken.

+0

Können Sie die Ausgabe von 'mit offenem (Pfad) als f: drucken (len (f.read()))'? –

+0

Wird die Datei auch aktiv heruntergeladen, während Sie diese Tests zufällig ausführen? –

+0

Was die Ausgabe von 'Druck ist (os.stat (Pfad) .st_size)' –

Antwort

1

Es kann mit NTFS alternate data streams zu tun haben. Obwohl der Artikel besagt, dass das Vorhandensein von ADS in einer Datei seine Größe nicht beeinflusst, haben sich die Dinge möglicherweise geändert, seit der Artikel geschrieben wurde (zurück im Jahr 2004) und der Eigenschaftsdialog von Windows 10 kann alle ADS in einer Datei berücksichtigen, während python nicht.

A more recent blog post erklärt, wie die Datenströme einer Datei mit Powershell-Dienstprogramme untersuchen:

Get-item -Path C:\Windows\System32\AdvancedInstallers\cmiv2.dll -stream * 

Wenn meine Hypothese richtig ist, dann sollte die Ausgabe etwa wie folgt aussehen:

FileName: C:\Windows\System32\AdvancedInstallers\cmiv2.dll 

Stream     Length 
------     ------ 
:$DATA     2193248 
SomethingElse   1059328 

(oder SomethingElse kann tatsächlich aus mehreren kleineren Streams mit Größen bis zu 1059328 bestehen).

+0

http://pasteboard.co/AvYQwJgiu.png gibt es 3252576. –

+1

@MaulikGangani Tritt das Problem für einige andere Dateien auch auf? – Leon

+0

Ich habe es mit anderen Dateien versucht, es funktioniert gut. Ich denke, diese Datei hat ein Problem für Python. Danke für die Hilfe. –

Verwandte Themen