Skip to content

Commit ccfcc1d

Browse files
committed
Fix: wrong comment in filesystem atomic operation section
1 parent 59c9e88 commit ccfcc1d

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

documents/vol2-modern-features/ch09-filesystem/02-filesystem-ops.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ related:
2626
> **学习目标**
2727
>
2828
> - 完成本章后,你将能够:
29-
> - [ ] 使用 `exists``is_regular_file``is_directory` 检查文件状态
30-
> - [ ] 掌握 `create_directory``create_directories` 的使用
31-
> - [ ] 安全地进行文件复制和删除操作
32-
> - [ ] 理解 `permissions``space``last_write_time` 等元数据查询
33-
> - [ ] 编写实用的日志轮转工具
29+
> - [ ] 使用 `exists``is_regular_file``is_directory` 检查文件状态
30+
> - [ ] 掌握 `create_directory``create_directories` 的使用
31+
> - [ ] 安全地进行文件复制和删除操作
32+
> - [ ] 理解 `permissions``space``last_write_time` 等元数据查询
33+
> - [ ] 编写实用的日志轮转工具
3434
3535
## 文件状态查询:它存在吗?它是什么类型?
3636

@@ -205,16 +205,19 @@ fs::copy("/tmp/source_dir", "/tmp/dest_dir",
205205
fs::copy_options::overwrite_existing);
206206
```
207207
208-
`fs::copy_file(from, to, options)` 是专门用于文件复制的函数。它和 `copy` 的区别在于:`copy_file` 只处理普通文件,而且提供了更精细的控制。⚠️ 注意:`copy_file` **不提供原子性保证**——如果复制过程中失败(如磁盘空间不足、断电等),目标文件可能处于部分写入状态。如需原子性,应使用"复制到临时文件 + 原子重命名"模式。
208+
`fs::copy_file(from, to, options)` 是专门用于文件复制的函数。它和 `copy` 的区别在于:`copy_file` 只处理普通文件,而且提供了更精细的控制。⚠️ 注意:`copy_file` **不提供原子性保证**——如果复制过程中失败(如磁盘空间不足、断电等),目标文件可能处于部分写入状态。如需原子性,应使用"复制到临时文件 + 原子重命名"模式 (参见"临时文件处理部分"的`safe_write_file`函数范例
209209
210210
```cpp
211-
// 安全的文件复制(原子性保证
211+
// 不安全的文件复制(无原子性保证
212212
fs::path src = "/data/important_config.yaml";
213213
fs::path dst = "/backup/important_config.yaml";
214214
215215
std::error_code ec;
216216
fs::copy_file(src, dst,
217217
fs::copy_options::overwrite_existing, ec);
218+
// 可能性1. 如果 dst 已经存在, 复制过程中内容可能会被逐步覆盖,
219+
// 从而导致其他进程看到一个被部分复制的文件
220+
// 可能性2. 如果复制中途停电宕机, dst文件可能处于不完整甚至损坏的状态
218221
if (ec) {
219222
std::cerr << "复制失败: " << ec.message() << "\n";
220223
} else {

0 commit comments

Comments
 (0)