Index: dll/win32/shell32/dialogs/filedefext.cpp
===================================================================
--- dll/win32/shell32/dialogs/filedefext.cpp	(revision 75273)
+++ dll/win32/shell32/dialogs/filedefext.cpp	(working copy)
@@ -484,6 +484,8 @@
     BOOL Success;
     WIN32_FIND_DATAW FileInfo; // WIN32_FILE_ATTRIBUTE_DATA
     WCHAR wszBuf[MAX_PATH];
+    ULONG lpBytesPerSector;
+    TCHAR lpszVolumePathName[MAX_PATH];
 
     TRACE("InitFileAttr %ls\n", m_wszPath);
 
@@ -551,8 +553,19 @@
             ULARGE_INTEGER FileSize;
             FileSize.u.LowPart = FileInfo.nFileSizeLow;
             FileSize.u.HighPart = FileInfo.nFileSizeHigh;
-            if (SH_FormatFileSizeWithBytes(&FileSize, wszBuf, _countof(wszBuf)))
+            if (SH_FormatFileSizeWithBytes(&FileSize, wszBuf, _countof(wszBuf))) {
                 SetDlgItemTextW(hwndDlg, 14011, wszBuf);
+                // Calculate size on disc
+                if( GetVolumePathName(m_wszPath, lpszVolumePathName, sizeof(lpszVolumePathName) / sizeof(TCHAR)) ) {
+                    if( GetDiskFreeSpace(lpszVolumePathName, NULL, &lpBytesPerSector, NULL, NULL) ) {
+                        if(FileSize.QuadPart % lpBytesPerSector) {
+                            FileSize.QuadPart = ((FileSize.QuadPart / lpBytesPerSector)+1)*lpBytesPerSector;
+                            SH_FormatFileSizeWithBytes(&FileSize, wszBuf, _countof(wszBuf));
+                        }
+                    }
+                }
+                SetDlgItemTextW(hwndDlg, 14012, wszBuf);
+            }
         }
     }
 
@@ -571,8 +584,19 @@
         SHCreateThread(CFileDefExt::_CountFolderAndFilesThreadProc, data, NULL, NULL);
 
         /* Update size field */
-        if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
+        if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf))) {
             SetDlgItemTextW(hwndDlg, 14011, wszBuf);
+            // Calculate size on disc
+            if( GetVolumePathName(m_wszPath, lpszVolumePathName, sizeof(lpszVolumePathName) / sizeof(TCHAR)) ) {
+                if( GetDiskFreeSpace(lpszVolumePathName, NULL, &lpBytesPerSector, NULL, NULL) ) {
+                    if(m_DirSize.QuadPart % lpBytesPerSector) {
+                        m_DirSize.QuadPart = ((m_DirSize.QuadPart / lpBytesPerSector)+1)*lpBytesPerSector;
+                        SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf));
+                    }
+                }
+            }
+            SetDlgItemTextW(hwndDlg, 14012, wszBuf);
+        }
 
         /* Display files and folders count */
         WCHAR wszFormat[256];
@@ -890,6 +914,7 @@
 {
     m_wszPath[0] = L'\0';
     m_DirSize.QuadPart = 0ull;
+    m_DirSizeOnDisc.QuadPart = 0ull;
 }
 
 CFileDefExt::~CFileDefExt()
@@ -1025,6 +1050,8 @@
     /* Find filename position */
     UINT cchBuf = wcslen(pwszBuf);
     WCHAR *pwszFilename = pwszBuf + cchBuf;
+    ULONG lpBytesPerSector;
+    TCHAR lpszVolumePathName[MAX_PATH];
     size_t cchFilenameMax = cchBufMax - cchBuf;
     if (!cchFilenameMax)
         return FALSE;
@@ -1069,6 +1096,15 @@
             FileSize.u.LowPart  = wfd.nFileSizeLow;
             FileSize.u.HighPart = wfd.nFileSizeHigh;
             m_DirSize.QuadPart += FileSize.QuadPart;
+            // Calculate size on disc
+            if( GetVolumePathName(pwszBuf, lpszVolumePathName, sizeof(lpszVolumePathName) / sizeof(TCHAR)) ) {
+                if( GetDiskFreeSpace(lpszVolumePathName, NULL, &lpBytesPerSector, NULL, NULL) )
+                    m_DirSizeOnDisc.QuadPart += FileSize.QuadPart % lpBytesPerSector ? ((FileSize.QuadPart/lpBytesPerSector)+1)*lpBytesPerSector : FileSize.QuadPart;
+                else
+                    m_DirSizeOnDisc.QuadPart += FileSize.QuadPart;
+            } else {
+                m_DirSizeOnDisc.QuadPart += FileSize.QuadPart;
+            }
         }
         if (GetTickCount() - *ticks > (DWORD) 300)
         {
@@ -1079,6 +1115,8 @@
 
                 if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
                     SetDlgItemTextW(hwndDlg, 14011, wszBuf);
+                if (SH_FormatFileSizeWithBytes(&m_DirSizeOnDisc, wszBuf, _countof(wszBuf)))
+                    SetDlgItemTextW(hwndDlg, 14012, wszBuf);
 
                 /* Display files and folders count */
                 WCHAR wszFormat[256];
@@ -1098,7 +1136,8 @@
 
         if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
             SetDlgItemTextW(hwndDlg, 14011, wszBuf);
-
+        if (SH_FormatFileSizeWithBytes(&m_DirSizeOnDisc, wszBuf, _countof(wszBuf)))
+            SetDlgItemTextW(hwndDlg, 14012, wszBuf);
         /* Display files and folders count */
         WCHAR wszFormat[256];
         LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, wszFormat, _countof(wszFormat));
Index: dll/win32/shell32/dialogs/filedefext.h
===================================================================
--- dll/win32/shell32/dialogs/filedefext.h	(revision 75273)
+++ dll/win32/shell32/dialogs/filedefext.h	(working copy)
@@ -82,6 +82,7 @@
 	DWORD m_cFiles;
     DWORD m_cFolders;
     ULARGE_INTEGER m_DirSize;
+    ULARGE_INTEGER m_DirSizeOnDisc;
 
     static DWORD WINAPI _CountFolderAndFilesThreadProc(LPVOID lpParameter);
 
@@ -125,4 +126,4 @@
     UINT cchBufMax;
 };
 
-#endif /* _FILE_DEF_EXT_H_ */
\ No newline at end of file
+#endif /* _FILE_DEF_EXT_H_ */
