禁用文件修改权限后无法锁定文件?多用户桌面应用技术求助
问题原因与解决方案
核心原因
你当前使用的FileStream构造方法指定了FileAccess.ReadWrite,这要求程序对目标文件拥有写入/修改权限。但你给用户配置的文件夹权限仅包含读取、创建,缺少写入权限,因此系统会抛出权限异常。
另外你提到启用修改权限后用户无法删除文件,这是NTFS权限的特性:修改权限仅包含「写入、修改内容」,删除是独立的权限项,所以即使开了修改权限,只要没给删除权限,用户确实无法删除文件。
修正方案
你的需求是锁定原文件防止多用户同时处理,而非修改原文件(原文件是最终版会计文档),所以完全不需要以ReadWrite模式打开文件。将FileAccess改为Read,同时保留FileShare.None即可实现锁定效果:
FileStream file = new FileStream(@"H:\" + doc_number + ".docx", FileMode.Open, FileAccess.Read, FileShare.None);
这样做的好处:
- 仅需读取权限,符合你对用户的权限配置要求,不会触发权限异常
FileShare.None会阻止其他进程以任何方式打开该文件,直到当前流关闭,完美实现首个用户锁定、后续用户无法访问的互斥逻辑
额外建议
如果原文件是只读属性(因为是最终版),无需额外调整——只要用户有读取权限,FileMode.Open配合FileAccess.Read就能正常运行。
内容的提问来源于stack exchange,提问作者Malyshev Artem
相关产品推荐
相关产品推荐

