如何自动更新文件的一部分?

时间:2018-08-25 16:08:13

标签: node.js linux filesystems sshfs

我有一个大文件(几个GB),我想更新其中的一小部分(用新值覆盖一些字节)。这必须以原子方式完成(要么操作成功,要么文件保持不变)。我该怎么办?

目的是将进度信息存储在一个文件中,该文件花费大量时间来生成/上载(它可以在远程文件系统上)。有时可能需要在文件的不同位置写入(并一次提交所有更改),但是如果需要,我可以重写整个索引,这是一个连续的块,与文件的其余部分相比较小。在任何给定时间,只有一个进程和线程写入文件。

2 个答案:

答案 0 :(得分:1)

普通磁盘不是事务性的,也不提供原子性保证。 如果基础文件系统不提供原子写入(并且大多数文件不提供),那么您将需要在自己的应用程序/数据结构中创建原子性。这可以通过日志记录(就像许多文件系统和数据库一样),写时复制技术等来实现。

在Windows中,事务文件系统(TxF)功能完全满足您的需要-但是您的应用程序将需要显式使用Win32事务文件I / O API来执行此操作。

答案 1 :(得分:0)

我认为简单的锁文件就足够了...

例如proper-lockfile

const lockfile = require('proper-lockfile');

lockfile.lock('some/file')
  .then(() => doStuff())
  .finally(() => lockfile.unlock('some/file'));

请注意,与some/file配合使用的任何逻辑都必须遵守lockfile