与具体格式无关的文本行虚拟存储。 写操作(追加/插入/替换/删除)只进入内存片段表 + WAL 日志; 顺序读取时自动把挂起修改“虚拟挂载”到输出流; 由外部显式调用 Merge() 把挂起修改合并回源文件。
TextLineStore
01 Syntax
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| AcquireLock | 1 | 按 TextStoreOptions.LockMode 获取数据文件的进程级锁。 默认配置(TextStoreLockMode.Exclusive + 超时 0)与旧版行为完全一致: 冲突时立即抛出 IOException。当 TextStoreOptions.LockWaitTimeoutMs 大于 0 时,按 TextStoreOption… |
| AppendLine | 1 | 在文件末尾追加一行。 |
| AppendLines | 1 | 在文件末尾追加多行(一条日志记录 + 一次 fsync,适合批量)。 |
| InsertLines | 1 | 从第 startLine 行开始插入多行:新内容占据 startLine..startLine+n-1, 原第 startLine 行及其后内容整体后移。startLine = TotalLines+1 时等价于追加。 |
| ReplaceLine | 1 | 把第 lineNumber 行的虚拟内容替换为 newContent。 |
| ReplaceLines | 1 | 从 startLine 起删除 deleteCount 行,并插入 newLines(可为 Nothing = 纯删除)。 |
| FlushLog | 1 | 强制把日志刷到磁盘(FsyncEachWrite=False 时由外部定期调用)。 |
| ReadLine | 1 | 随机读取虚拟第 lineNumber 行。 |
| ReadLines | 2 | 顺序读取全部虚拟行(挂起修改自动叠加)。单遍流式,不加载整个文件。 |
| Merge | 1 | 把挂起修改合并回源文件,然后清空日志。 纯追加型布局走快路径(只写新增字节);否则全量重写 + 原子替换。 合并过程本身崩溃安全(mb/mbf/md 标记 + .bak 备份)。 |
| TryMerge | 1 | 尝试把挂起修改合并回源文件。 |
| RebuildLineIndex | 1 | 强制重建并保存行索引(维护用途)。 |
| Open | 1 | |
| Dispose | 1 | |
| DeleteLine | 1 | |
| DeleteLines | 1 |
03 Properties
| Name | Overloads | Summary |
|---|---|---|
| TotalLines | 1 | 当前虚拟总行数(含挂起的增删)。 |
| IsReadOnlyMode | 1 | 是否为共享读(只读)模式。该模式下不获取独占锁、不打开写句柄, 也不会修改数据文件 / 索引文件 / 日志文件,因此多个只读实例可以共存。 |
| DataFilePath | 1 | |
| LogFilePath | 1 | |
| IndexFilePath | 1 | |
| IndexGranularity | 1 | |
| FileNewLine | 1 | |
| BaseLineCount | 1 | |
| PendingOperationCount | 1 | |
| PendingBufferedLineCount | 1 | |
| HasPendingChanges | 1 |
04 Events
| Name | Overloads | Summary |
|---|---|---|
| Info | 2 | 运行期诊断信息(索引重建、撕裂修复、崩溃恢复等)。 |
05 Members
按 TextStoreOptions.LockMode 获取数据文件的进程级锁。
默认配置(TextStoreLockMode.Exclusive + 超时 0)与旧版行为完全一致: 冲突时立即抛出 IOException。当 TextStoreOptions.LockWaitTimeoutMs 大于 0 时,按 TextStoreOptions.LockRetryIntervalMs 轮询等待直到超时, 从而支持多进程「交替访问」:任一时刻只有一个写者,各进程在语句之间释放并重新获取锁。
String)在文件末尾追加一行。
IEnumerable(Of String))在文件末尾追加多行(一条日志记录 + 一次 fsync,适合批量)。
Int64, IEnumerable(Of String))从第 startLine 行开始插入多行:新内容占据 startLine..startLine+n-1, 原第 startLine 行及其后内容整体后移。startLine = TotalLines+1 时等价于追加。
Int64, String)把第 lineNumber 行的虚拟内容替换为 newContent。
Int64, Int64, IEnumerable(Of String))从 startLine 起删除 deleteCount 行,并插入 newLines(可为 Nothing = 纯删除)。
强制把日志刷到磁盘(FsyncEachWrite=False 时由外部定期调用)。
Int64)随机读取虚拟第 lineNumber 行。
顺序读取全部虚拟行(挂起修改自动叠加)。单遍流式,不加载整个文件。
Int64, Int64)顺序读取虚拟第 startLine 行起的最多 count 行。
把挂起修改合并回源文件,然后清空日志。 纯追加型布局走快路径(只写新增字节);否则全量重写 + 原子替换。 合并过程本身崩溃安全(mb/mbf/md 标记 + .bak 备份)。
尝试把挂起修改合并回源文件。
True 表示合并已完成(或本来就无需合并);False 表示合并被推迟 —— 此刻仍有 未完成的 TextLineStore.ReadLines() 枚举,调用方应当稍后重试。
后台检查点必须优先使用本方法:抛异常会让调用方难以区分「暂时无法合并」与 「合并失败」,从而把一次可重试的并发冲突变成永久故障。
强制重建并保存行索引(维护用途)。
当前虚拟总行数(含挂起的增删)。
是否为共享读(只读)模式。该模式下不获取独占锁、不打开写句柄, 也不会修改数据文件 / 索引文件 / 日志文件,因此多个只读实例可以共存。
运行期诊断信息(索引重建、撕裂修复、崩溃恢复等)。
Int64)Int64, Int64)