2017-02-20 29 views
2

Python 3.6.0, Windows 10 (64 бит)os.path.getsize дает неправильный размер файла .dll в окнах 10

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

этот код дает выход 2193248 но когда я вижу свойства этого файл показать 3252576. Это не размер на диске. Я говорю о фактическом размере.

file properties

Я ожидаю программу питона для печати 3252576.

+0

Можете ли вы напечатать вывод 'с открытым (путь) как f: print (len (f.read()))?? –

+0

Кроме того, файл активно загружается, когда вы запускаете эти тесты случайно? –

+0

Какой выход из 'печати (os.stat (путь) .st_size)' –

ответ

1

Возможно, это связано с NTFS alternate data streams. Хотя в статье говорится, что наличие ADS в файле не влияет на его размер, все может измениться с момента написания статьи (еще в 2004 году), а диалоговое окно свойств Windows 10 вполне может учитывать все ADS в файле, тогда как python не делает.

more recent blog post объясняет, как исследовать потоки данных в файл с помощью PowerShell утилиты:

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

Если моя гипотеза верна, то вывод должен выглядеть примерно следующим:

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

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

(или SomethingElse может фактически состоять из нескольких небольших потоков с размерами, суммирующими до 1059328).

+0

http://pasteboard.co/AvYQwJgiu.png это дает 3252576. –

+1

@MaulikGangani Проблема возникает и для некоторых других файлов? – Leon

+0

Я пробовал с другими файлами, он отлично работает. Я думаю, что у этого файла есть проблема для python. Спасибо за помощь. –