[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
首先在cmd下
dir缺省是以文件名排序显示的
其次文件的修改时间只精确到秒级
当文件的修改时间相同时
以修改时间排序显示时
会按照文件的逻辑存储顺序显示

以下内容仅止于猜测
文件的逻辑存储顺序
与NTFS或者FAT32的文件系统格式无关
而是与磁盘的IO与缓存性能有关
也就是说当系统的磁盘IO与缓存性能极好
且当前无其他显著的磁盘IO任务
那么文件的逻辑存储顺序与文件创建顺序基本一致
如果系统磁盘IO与缓存性能很差
比如闪存盘的IO读写性能
或者当前有其他显著的磁盘IO任务
比如后台的病毒扫描任务
那么文件的逻辑存储顺序与文件创建顺序差异会很大
天的白色影子

TOP

42# michael8111
“比较”以及“理想”都是一个模糊的词
需要一个量化的指标来进行标定
可能需要一个脚本

另外修改时间确实是秒级
这是文件存储的数据结构所决定的
dir不可能会检查到低于秒级的单位
这种情况只可能是因为有足够的时间缓冲
文件得以按顺序逐一flush到磁盘中
所以dir才能按照创建顺序展示
天的白色影子

TOP

46# zm900612
已经试验证实文件逻辑存储顺序与文件系统有关
对一个磁盘分区先后格式化为NTFS、FAT32、exFAT三种FS格式
拷入以下脚本文件反复测试文件逻辑存储的偏移
结果发现在同一台PC上
NTFS总是具有明显的偏移
FAT32和exFAT则几乎没有
另外发现NTFS下文件写入的速度的明显快于FAT32/exFAT
推测正因为NTFS采取了更为高效的缓存机制
所以一方面导致文件读写性能大幅提升
另一方面导致文件的逻辑存储顺序随机化
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /l %%i in (1,1,300) do echo.A>%%i.xxx
  3. set maxoffset=0
  4. set minoffset=0
  5. for /f %%f in ('dir /a-d /b /od *.xxx') do (
  6. set/p=%%f <nul
  7. set /a count+=1
  8. set /a offset=%%~nf-count
  9. if !offset! gtr !maxoffset! set maxoffset=!offset!
  10. if !offset! lss !minoffset! set minoffset=!offset!
  11. )
  12. echo.
  13. echo ----------- %minoffset% : %maxoffset% -----------------
  14. pause
  15. del *.xxx
复制代码
天的白色影子

TOP

51# plp626
辞不达意
看不出跟上下文有什么关联
天的白色影子

TOP

54# fastslz
NTFS可以精确到100000毫秒以内
可能是描述性错误
NTFS的创建时间可以精确到0.000001毫秒

wmic的结果说明不了太多的问题
只能说明ntfs的文件是成批的flush的
而且wmic的CreationDate还出现了错误
在删除文件后重新创建该文件
该文件的CreationDate显示的还是上一次创建时间
测试代码如下:
  1. @echo off
  2. for /l %%i in (1,1,30) do echo.A>%%i.xxx
  3. Wmic Datafile Where "Extension='xxx' and Drive='d:' and Path='\\Test\\temp\\'" get CreationDate,name /format:htable:"sortby=CreationDate"> batfile.html
  4. del *.xxx
  5. for /l %%i in (1,1,30) do echo.A>%%i.xxx
  6. Wmic Datafile Where "Extension='xxx' and Drive='d:' and Path='\\Test\\temp\\'" get CreationDate,name /format:htable:"sortby=CreationDate">> batfile.html
  7. del *.xxx
  8. start batfile.html
复制代码
现在已经大致有了NTFS写入文件的轮廓
文件句柄的创建与关闭肯定是顺序的
文件首先写入到缓存(可能是内存或虚拟内存)中
缓存上的文件数据块受缓存管理器管理
无论NTFS、FAT32还是exFAT都是统一的缓存管理器
NTFS卷上的文件更新时需要先更新日志文件
以便于数据文件写入失败时可以继续或者撤销
在日志文件写入物理存储之前
数据文件被缓存管理器定义为不可写NO WRITE状态
而日志文件的写入时机是受缓存管理器约束的
为了提高IO性能
缓存管理器对数据文件和日志文件的管理是多线程并发的
而受到Windows核心对CPU资源的管理策略影响
并发线程的执行顺序有一定的随机性
所以数据文件的实际写入顺序存在一定的随机性
天的白色影子

TOP

返回列表