惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
L
LINUX DO - 最新话题
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
月光博客
月光博客
博客园 - 叶小钗
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
D
DataBreaches.Net
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
量子位
美团技术团队
Vercel News
Vercel News
Y
Y Combinator Blog
IT之家
IT之家
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
腾讯CDC
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
博客园 - 司徒正美
N
Netflix TechBlog - Medium
S
Schneier on Security
博客园 - 聂微东
U
Unit 42
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
雷峰网
雷峰网
Latest news
Latest news

博客园 - eaglet

HubbleDotNet 的注册码生成器 文件名通配符匹配的代码 .net 下如何将文档文件(Word, Pdf等) 中的文本提取出来 NTCPMSG 开源高性能TCP消息发送组件 文件是否真的写入了磁盘? 如何自动延长 windows 2008 试用版的试用期 获取ALL USER 的特殊目录的类 i—比 i++ 快? 多线程环境下调用 HttpWebRequest 并发连接限制 HubbleDotNet+Mongodb 构建高性能搜索引擎--概述 C# 重启计算机的问题 HubbleDotNet 索引分词的测试方法和分词技巧 Windows 启动顺序详解 记录windows操作系统启动日志 C# 程序自动批量生成 google maps 的KML文件 通过 Windows 7 共享上网 正确理解 SqlConnection 的连接池机制 Windows 2008 server + IIS 7 设置身份模拟(ASP.NET impersonation) IIS 7.5 配置 FTP Passive 模式
文件在不同文件系统间拷贝文件时间改变的问题
eaglet · 2012-10-12 · via 博客园 - eaglet

作者: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