代码之家  ›  专栏  ›  技术社区  ›  Mordachai

是否有标准的文件保存和交换模式?

  •  3
  • Mordachai  · 技术社区  · 6 年前

    因此,Windows不允许任何其他进程做的不仅仅是从文件中读取,也不允许从资源管理器或其他进程中删除该文件-因为该文件上有打开(和写入独占)的句柄。

    但是,有时我们的客户会报告所有这些导致的损坏文件(仅通过网络-从不在本地)。

    1. 倒带(已打开)文件句柄
    2. fseek到文件结尾
    3. 刷新和截断句柄

    因此,我正在实现一个两层修复:

    1. 执行“另存为临时”、“关闭”、“重命名”

    这是“构建一个新副本,然后将其交换到实际/活动数据结构”的经典模式的基本用法。

    我可以做古典音乐:

    1. 将(实际)文件重命名为.bak。

    (当然,我需要先删除以前的a.bak)。

    1. 写T
    2. 将a重命名为a.bak
    3. 获取对

    • 在2到5之间,任何其他人都可以在a上抓到一把锁或以其他方式挡住我们的路。

    所以-理想情况下,我不想在任何时候放弃对A的控制!我想确保每一次的交接都是不受防病毒软件或其他软件的影响的,这样就不会进入其中并把事情搞砸。

    1. 写T
    2. 永远快乐地生活…

    其他完全有助于重新思考我的方法的想法?

    更新:

    更新2:
    1.(保存到临时本地验证副本)

    三。(验证新保存和验证匹配)

    5.将实际文件重命名为临时旧文件,并用临时文件替换原始文件(这包括传输属性、ACL和时间戳-请参见replaceFile())

    第七章。成功(放弃我们的守卫)

    1 回复  |  直到 6 年前
        1
  •  1
  •   Adrian McCarthy    6 年前

    ReplaceFile 是一种相当标准的方法。