• 文件在不同文件系统间拷贝文件时间改变的问题


    作者:eaglet

    转载请注明出处

    我所做的系统需要比较文件时间和大小来确定两个文件是否相同,但在运行过程中,经常会发现文件时间被莫名其妙的修改了1-2秒。这个问题我一直没有仔细去研究,一直以为是微软的一个bug,直到最近发现这个问题不搞清楚实在是不行了,系统经常会从服务器下载相同的文件。今天仔细研究了一下这个问题,发现并不是微软操作系统的问题,而是文件系统设计的问题。

    直接切入正题

    FAT32 文件系统采用FAT表(文件分配表)来存储文件的索引信息,为了尽量减少FAT表中每个文件占用的空间数量, FAT32 文件系统将文件大小限制为小于4GB, 文件时间精度限制为2秒,以偶数对齐。而NTFS文件系统采用的是MFT表(主文件表)来存储文件的元数据,这个主文件表相当于一个小的数据库,它可以存储更多的元数据。所以NTFS文件系统无论是文件大小还是文件时间精度都远远高于FAT32. NTFS的文件精度是100ns。

    由于两种文件系统的文件精度不一样,如果我们把文件从NTFS文件系统拷贝到FAT32文件,由于时间精度不同,文件时间将被强制以偶数对齐。

    NTFS 时间: 7 hours 31 min 0 sec 000ms.
    FAT 时间为: 7 hours 31 min 0 sec 000ms.

     
    NTFS 时间: 7 hours 31 min 0 sec 001ms.
    FAT32 时间为:7 hours 31 min 2 sec 000ms.


    NTFS 时间: 7 hours 31 min 1 sec 000ms.
    FAT32 时间为:7 hours 31 min 2 sec 000ms.

     
    NTFS 时间:7 hours 31 min 1 sec 999ms.
    FAT32 时间为:7 hours 31 min 2 sec 000ms.

    从上面的例子我们可以看出NTFS 到 FAT32 ,文件时间最多会相差2秒。

    我们在程序中如果要通过文件时间来判断文件是否相同,一定要考虑到两种文件系统的时间误差的问题,否则会导致系统出现错误。另外用MD5 来判断文件是否相同会更好一些,不过对于大文件,MD5的计算时间会比较长。

     

    参考:

    http://support.microsoft.com/kb/127830

  • 相关阅读:
    四则运算2
    进度条博客
    随机生成30道100以内的四则运算题
    构建之法阅读笔记01
    自我介绍
    c# dataGridView cell添加下拉框
    Winform Combobox.Items tooltip
    中医和红外(北京第一个工作)
    pdf修复
    c# 导出数据到excel
  • 原文地址:https://www.cnblogs.com/eaglet/p/2721165.html
Copyright © 2020-2023  润新知