.net 以编程方式确定文件';s的碎片状态

.net 以编程方式确定文件';s的碎片状态,.net,filesystems,low-level,fragmentation,defragmentation,.net,Filesystems,Low Level,Fragmentation,Defragmentation,是否可以确定特定文件的碎片状态(即此文件占用的不同碎片数量)? 如果是这样,如何使用.net实现这一点 其动机是:我的应用程序将数据保存在文件流中,并根据需要更改其大小。这最终会导致文件碎片化。我想监控文件的碎片状态,并在此基础上决定是否复制该文件并用新文件替换(因此在不更改MFT的情况下对其进行“碎片整理”)这完全属于“过早优化”类别。根本不能保证您会导致碎片,光盘可能在文件末尾有未提交的群集,而且经常会。也许更重要的是,.NET framework中没有任何东西允许您检测或修复此问题。访问卷

是否可以确定特定文件的碎片状态(即此文件占用的不同碎片数量)? 如果是这样,如何使用.net实现这一点


其动机是:我的应用程序将数据保存在文件流中,并根据需要更改其大小。这最终会导致文件碎片化。我想监控文件的碎片状态,并在此基础上决定是否复制该文件并用新文件替换(因此在不更改MFT的情况下对其进行“碎片整理”)

这完全属于“过早优化”类别。根本不能保证您会导致碎片,光盘可能在文件末尾有未提交的群集,而且经常会。也许更重要的是,.NET framework中没有任何东西允许您检测或修复此问题。访问卷的MFT需要非托管代码和管理员权限


磁盘碎片整理是一项正常的机器维护任务。Win7自动启动。

@nobugz,谢谢你的建议,但请允许我解释一下:1。当经常增加文件流的大小时,它往往会导致碎片(以我的经验,另请参阅)。2.创建一个具有一定大小的新流,并将原始流复制到其中,这有助于克服碎片问题,因为新文件分配了一系列相当多的集群,所以我确实有办法“修复”这个问题。我没有假设碎片化,我假设它是可能的,我正在寻找一种在运行时否定或验证我的怀疑的方法。4.我可以用非常丑陋的方式激活碎片整理分析并检查日志文件。。。但这真的很难看。5.我可以肯定地告诉你,我的客户没有对他们的磁盘进行碎片整理,而且大多数仍然使用WinXP@马克·兰森,我想买一个SSD,我想为我的每个客户买一个。也许十年后,文件碎片将过时。同时…@nobugz,最后,你可能是对的,这可能是过早的优化。尽管如此,我还是很想得到问题本身的答案(不管动机如何),我建议你问一个不同的问题:“如何检测Windows中的碎片程度”,不要提托管代码。在Linux上,这可以通过
filefrag
使用的系统调用实现,
ioctl(FIEMAP)
。大多数磁盘文件系统都支持,但不是通过NFS。