磁盘碎片整理中的逻辑;磁盘检查

时间:2009-07-06 07:46:18

标签: c# windows disk defragmentation

Windows中的磁盘碎片整理和磁盘检查背后的逻辑是什么?我可以使用C#编码吗?

5 个答案:

答案 0 :(得分:7)

为了完整起见,这里是一个用于碎片整理的C#API包装器:

http://blogs.msdn.com/jeffrey_wall/archive/2004/09/13/229137.aspx

现在使用这些API进行碎片整理(应该是)非常安全。即使您想要,也不应该破坏文件系统。

商业碎片整理程序使用相同的API。

答案 1 :(得分:3)

在msdn上查看Defragmenting Files可能的API助手。

您应该仔细考虑使用C#执行此任务,因为它可能会为编组本机Win32引入一些不需要的开销。

答案 2 :(得分:3)

如果你不知道碎片整理的逻辑,如果你没有自己编写文件系统,所以你不能权威地检查它是否有错误,为什么不启动运行'defrag'和'chkdsk'的新进程?

答案 3 :(得分:3)

Mark Russinovich不久前写了一篇文章Inside Windows NT Disk Defragmentation,它提供了深入的细节。如果你真的想这样做我真的建议你使用内置的设备进行碎片整理。更重要的是,在最近的操作系统中,我从未发现需要用户甚至关心碎片整理;它将按计划自动完成,MS的NTFS人员肯定比你更聪明(对不起,但他们现在这样做了一段时间,你没有)。

答案 4 :(得分:1)

尽管它非常重要,但文件系统只不过是一个将文件名映射到磁盘块列表的数据结构。并跟踪元信息,例如文件的实际长度和保存文件列表(例如目录)的特殊文件。磁盘检查程序验证数据结构是否一致。也就是说,每个磁盘块必须可以自由分配给文件或属于单个文件。它还可以检查某些磁盘块看起来是应该在目录中但不是出于某种原因的文件的某些情况。

碎片整理是关于查看分配给每个文件的磁盘块列表。如果文件使用连续的块集而不是分散在整个磁盘上的块,则通常会加载更快的文件。通常,如果使用的所有磁盘块都限制在磁盘的单个连续范围内,整个文件系统将表现最佳。因此,技巧是安全地移动磁盘块以实现此目的,同时不破坏文件系统。

这里的主要困难是在使用磁盘时运行这些应用程序。这是可能的,但必须非常,非常,非常小心,不要做出某种明显或极其微妙的错误并破坏大部分或全部文件。离线处理文件系统更容易。

另一个困难是处理文件系统的复杂性。例如,你可以更好地构建支持FAT32而不是NTFS的东西,因为前者是一个更简单的文件系统。

只要您具有低级别的块访问权限以及处理并发性问题的一些明智方法(最好通过在不使用时处理文件系统来处理),您可以使用C#,perl或任何语言执行此操作等。

但非常小心。早期版本的程序会破坏整个文件系统。以后的版本只会在不明显的情况下这样做。如果你破坏他们的数据,用户会非常愤怒和诉讼。