Nim中是否存在可获取文件路径或名称的统一文件抽象对象?
Nim 统一文件抽象实现方案
Nim 标准库没有原生提供同时封装文件路径、FileInfo元数据的内置对象:
FileInfo仅存储文件大小、修改时间、权限等元数据,设计上未绑定对应的文件路径File/FileHandle仅封装打开的文件句柄,也没有保存关联的路径信息
你可以通过自定义对象快速实现符合需求的统一抽象,实现成本极低且可以完全适配所有现有标准库的文件操作:
1. 基础抽象定义
import os, options type UnifiedFile = object path*: string # 存储文件名/完整路径,供所有标准库过程调用 info*: FileInfo # 缓存的文件元数据 handle*: Option[File] # 可选字段,需要维护打开的文件句柄时保留,不需要可以删除
2. 配套便捷方法
初始化实例
创建实例时自动拉取对应文件的FileInfo:
proc initUnifiedFile(path: string): UnifiedFile = result.path = path result.info = getFileInfo(path) result.handle = none(File)
刷新元数据
文件内容/属性修改后同步更新缓存的FileInfo:
proc refreshInfo(f: var UnifiedFile) = f.info = getFileInfo(f.path)
直接删除文件
无需额外传递路径参数,直接调用标准库能力:
proc delete(f: UnifiedFile): bool = result = removeFile(f.path)
3. 标准库适配说明
所有现有标准库的文件相关过程都可以直接复用该抽象:
- 直接取
UnifiedFile.path作为参数传入即可,比如readFile(myFile.path)、setFilePermissions(myFile.path, {fpUserRead}) - 也可以通过重载标准库过程实现更简洁的调用,比如新增
proc readFile(f: UnifiedFile): string = readFile(f.path)后,直接调用readFile(myFile)即可
内容的提问来源于stack exchange,提问作者ChrisoLosoph
相关产品推荐
相关产品推荐

