问题:如何列出卷上占用磁盘大小的所有文件?
适用的解决方案:
问题:
列出文件有很多工具和api,但是它们的结果与chkdsk和实际的可用空间信息不匹配:
Size Count (x1000)
chkdsk c: 67 GB 297
dir /S 42 GB 267
FS Inspect 47 GB 251
Total Commander (Ctrl+L) 47 GB 251
explorer (selection size) 44 GB 268
explorer (volume info) 67 GB -
WinDirStat 45 GB 245
TreeSize couldn't download it - site unavailable
C++ FindFirstFile/FindNextFile 50 GB 288
C++ GetFileInformationByHandleEx 50 GB 288
Total volume size is 70 GB, about 3 GB is actually free.
我知道:
实际问题:
我有70 GB SSD磁盘,所有工具报告大约占用50 GB,但事实上它几乎已满。 格式化全部并重新安装 - 不是一个选项,因为这将很快再次发生。
我需要一份关于文件大小的报告。报告总数必须与实际使用和可用空间相匹配。我正在寻找一个现有的解决方案 - 工具,脚本或C ++库或C ++代码。
(下面的实际输出)
chkdsk c:
Windows has scanned the file system and found no problems.
No further action is required.
73715708 KB total disk space.
70274580 KB in 297259 files.
167232 KB in 40207 indexes.
0 KB in bad sectors.
463348 KB in use by the system.
65536 KB occupied by the log file.
2810548 KB available on disk.
4096 bytes in each allocation unit.
18428927 total allocation units on disk.
702637 allocation units available on disk.
dir / S
Total Files Listed:
269966 File(s) 45 071 190 706 bytes
143202 Dir(s) 3 202 871 296 bytes free
FS Inspect http://sourceforge.net/projects/fs-inspect/
47.4 GB 250916 Files
总指挥官
49709355k, 48544M 250915 Files
答案 0 :(得分:1)
在Posix系统上,答案是使用stat
功能。不幸的是,它没有给出Windows中分配的块的数量,因此它不符合您的要求。
Windows API的正确功能是GetFileInformationByHandleEx
。您可以使用FindFirstFile
,FindNextFile
浏览整个磁盘,并要求FileStandardInfo
获取包含文件的FILE_STANDARD_INFO
(以及其他字段):{{1分配的大小和LARGE_INTEGER AllocationSize
用于使用的大小。
或者,您可以直接在目录上使用LARGE_INTEGER EndOfFile
,要求GetFileInformationByHandleEx
获取FileIdBothDirectoryInfo
结构。这允许您在一次调用中获取有关许多文件的信息。我的建议是使用那个,即使它不常用。
答案 1 :(得分:0)
要获取所有文件(包括隐藏文件和系统文件)的列表,按目录排序,大小减小,您可以转到cmd.exe并输入:
dir /s/a:-d/o:-s C:\* > "list_of_files.txt"
其中:
/s
列出指定目录和所有子目录中的文件/a:-d
仅列出文件(无目录),/o:-s
按文件大小顺序将文件放在目录中,C:\*
表示all directories on disk C
,> "list_of_files.txt"
表示save output to list_of_files.txt file
列出按目录分组的文件可能有点不方便,但它是列出所有文件的最简单方法。有关详细信息,请查看technet.microsoft.com
检查Win7 Pro。