什么是更快的重命名文件,更改其中的属性或在文件夹之间移动它们

时间:2011-06-26 11:05:14

标签: c# .net filesystems

我正在开发一个文件系统管理器模块,并想知道什么是更有效的方法。

这将在具有NTFS的Windows计算机上。

模块需要通知另一个模块有关在特定目录上创建的新文件,并且还要为这些文件维护某种状态,以便可以删除已处理的文件,如果失败,将处理未处理的文件试。

我想过要么在目录之间移动文件作为状态更改,要么根据状态重命名文件或更改文件属性作为其状态的标志。

我想知道什么是最有效的方法,考虑到在短时间内创建大量文件的可能性。

3 个答案:

答案 0 :(得分:3)

我无法完全回答您的问题,但请提供一些一般性提示。最重要的是,您的问题的答案可能在很大程度上取决于底层文件系统(NTFS,FAT32等)。

在同一分区上重命名或移动文件通常意味着更改了目录条目。无需触及实际文件内容。将文件移动到其他分区或硬盘驱动器后,也必须复制实际文件内容,这需要花费更多时间。

尽管如此,我通常假设重命名比将文件移动到另一个目录(在同一分区上)更快稍微,因为只有一个目录受影响而不是两个。我也不太确定你改变文件“属性”是什么意思 - 但是,如果你在谈论例如设置文件的“archive”标志,或使文件“只读”,如果目录条目可以就地更改而不是重命名,那么该文件可能稍微比重命名更快取而代之的是另一种不同尺寸的新款。

再次:请谨慎对待我的假设,因为这完全取决于特定的文件系统。 (例如,将文件隐藏在UNIX文件系统上通常意味着重命名它 - 在名称前添加. - ,但对于典型的DOS / Windows文件系统则不然。)

答案 1 :(得分:1)

为什么要将这些信息直接存储在文件系统中?我建议使用SQL数据库来跟踪文件。这样,您可以避免修改文件系统,它可能会更快,如果您需要,您可以轻松获得有关文件的更多信息。

此外,拥有一个包含大量文件的文件夹本身可能会很慢,因此您可以考虑为文件添加更多文件夹,如果这对您有意义的话。

答案 2 :(得分:0)

Renaming took: 1498.8166
ApplyAttribute took: 340.5407
Transfer took: 2527.6837
Transfer took: 3933.4944
ApplyAttribute took: 419.635
Renaming took: 1384.0079

使用1000个文件进行测试。 运行测试两次以确保没有缓存。

已编辑:讨厌的错误已修复,抱歉。

使用属性。