人人都会AI编程

文件系统、路径规范差异

更新时间:2026-07-11

1. 路径分隔符

  • Windows:使用反斜杠 \(例如 C:\Users\Name\file.txt),但很多 API 也接受正斜杠 /
  • macOS / Linux:统一使用正斜杠 /(例如 /home/name/file.txt)。

问题:如果在代码中拼接字符串直接使用 \/,就会在不同平台出错。
解决方法:使用 Rust 的 std::path::PathPathBuf,它们会自动处理分隔符。前端需要拼接路径时,通过 Tauri 的命令调用后端来处理,避免直接用字符串拼路径。在前端代码中,如果必须手动构造,可以用 path.join()(Node.js 环境)或自定义工具函数,但更推荐统一由后端处理。


2. 绝对路径与根目录

  • Windows:可以有多个盘符(C:\D:\),没有单一的根目录 /。路径大小写不敏感(除非开启 NTFS 大小写敏感选项,但通常不开启)。
  • macOS / Linux:只有一个根目录 /,所有文件和设备都挂载在它下面。路径大小写敏感(File.txtfile.txt 是不同文件)。

影响:如果你用 starts_with("/") 判断是否为绝对路径,Windows 上会漏掉 C:\ 这样的形式。
解决方法:在 Rust 中用 path.is_absolute() 检查是否为绝对路径;不要做字符串级别的路径比较。


3. 特殊目录的获取方式

获取“用户主目录”“临时目录”“应用数据目录”等系统定义的特殊目录时,不同平台 API 不同:

  • Windows%USERPROFILE%%LOCALAPPDATA%%TEMP% 等环境变量。
  • macOS/Users/名称/Library/Application Support/(需要对应 API)。
  • Linux$HOME,应用配置常放在 $HOME/.config/$HOME/.local/share/

Tauri 提供了 app.path() API,能直接返回跨平台的标准路径,例如:

tauri::api::path::home_dir()        // 用户主目录
tauri::api::path::app_local_data_dir()  // 应用数据目录
tauri::api::path::temp_dir()        // 临时目录

使用这些 API 替代直接写死路径。


4. 文件名符号限制

  • Windows:文件名不能包含 \/:*?"<>|,同时保留设备名(CONPRNNUL 等)也不能用。
  • macOS:允许冒号 : 在文件名中(但会被 Finder 显示为 /,底层实际存为 /),不能使用 \0(空字符),其他大多允许。
  • Linux:只禁止 \0/

建议:用户输入的文件名需做过滤。Tauri 自身提供了一个 sanitize_file_name() 函数(或可以使用 sanitize-filename 类库),确保文件名在所有平台安全。写入文件时也应当验证路径不遍历到上级目录(.. 攻击)。


5. 文件权限与隐藏文件

  • Windows:隐藏属性可以通过 attrib 设置,权限模型基于 ACL,Tauri 默认受限于应用沙箱。
  • macOS / Linux:以点开头的文件(如 .env)表示隐藏文件,权限用 Unix 位掩码。macOS 还有额外的资源分叉(已弃用但需注意)和 scoped bookmarks 安全限制。

实用建议:不要去假设文件可读/可写,一定要做好错误处理。跨平台创建文件默认权限通常是 0o666 减去 umask,但 Windows 上权限继承更复杂,Tauri 的文件系统 API 会帮你处理好大部分平台细节。


6. 行尾符与文本文件

Windows 历史使用 \r\n(CRLF),macOS/Linux 使用 \n(LF)。如果应用需要读写文本文件,可能导致解析出错。Rust 的 BufReaderlines() 默认会处理好这些,但若你用底层 read_to_string() 得到的字符串可能包含 \r\n。前端读取时,最好做一下标准化。


7. 临时文件清理

不同平台临时目录清理策略不同:Windows 的 %TEMP% 不会自动清空,macOS 有时在重启后清空,Linux 常依托 systemd-tmpfiles。在 Tauri 中写入临时文件后,应用退出时应主动删除,避免堆积。


一句话总结
让 Tauri 的 API 帮你处理路径和文件系统差异,不要手动拼接路径字符串,也不要用 if (platform === 'win') 做硬件适配——除非是在处理非常特殊的需求。跨平台一致性是 Tauri 内置就提供的,善用它。