关于SpreadsheetGear.Factory.GetWorkbook文件锁与边缘场景的技术问询
关于SpreadsheetGear Factory.GetWorkbook的边缘场景说明
你观察得没错,SpreadsheetGear的Factory.GetWorkbook(filename)确实会以共享读写权限打开文件,逻辑类似你给出的这段代码:
FileStream fsSource = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
下面是几个需要注意的边缘场景:
读取时Excel保存的冲突与内容不一致
- 若你的程序正在读取,用户在Excel执行保存:
- 部分系统环境下,Excel直接覆盖原文件会失败,弹出“文件被占用”提示;
- 采用临时文件替换机制的Excel版本,你的读取流绑定的是原文件句柄,原文件被替换后,你读到的还是旧内容;
- 极端情况下,若读取刚好赶上Excel写入的中间阶段,会读到半写入的残缺数据,导致解析报错或数据异常。
- 若你的程序正在读取,用户在Excel执行保存:
性能与稳定性问题
- 当Excel频繁保存文件时,系统文件缓存会被频繁刷新,你的程序读取可能被迫从磁盘直接读取,速度变慢;
- 读取过程中如果文件被移动、删除或权限变更,读取流会直接抛出IO异常,中断操作。
内容的提问来源于stack exchange,提问作者Moe Sisko
相关产品推荐
相关产品推荐

