因此,Windows不允许任何其他进程做的不仅仅是从文件中读取,也不允许从资源管理器或其他进程中删除该文件-因为该文件上有打开(和写入独占)的句柄。
但是,有时我们的客户会报告所有这些导致的损坏文件(仅通过网络-从不在本地)。
-
倒带(已打开)文件句柄
-
-
-
fseek到文件结尾
-
-
刷新和截断句柄
因此,我正在实现一个两层修复:
-
-
执行“另存为临时”、“关闭”、“重命名”
这是“构建一个新副本,然后将其交换到实际/活动数据结构”的经典模式的基本用法。
我可以做古典音乐:
-
-
将(实际)文件重命名为.bak。
-
(当然,我需要先删除以前的a.bak)。
-
写T
-
-
将a重命名为a.bak
-
-
获取对
-
在2到5之间,任何其他人都可以在a上抓到一把锁或以其他方式挡住我们的路。
所以-理想情况下,我不想在任何时候放弃对A的控制!我想确保每一次的交接都是不受防病毒软件或其他软件的影响的,这样就不会进入其中并把事情搞砸。
-
写T
-
-
永远快乐地生活…
其他完全有助于重新思考我的方法的想法?
更新:
更新2:
1.(保存到临时本地验证副本)
三。(验证新保存和验证匹配)
5.将实际文件重命名为临时旧文件,并用临时文件替换原始文件(这包括传输属性、ACL和时间戳-请参见replaceFile())
第七章。成功(放弃我们的守卫)