文件权限问题

刘志伟_ 2016-02-18 04:52:52
有一个文件已经被excel打开了我的程序之后进行打开操作

fileStream fs = new FileStream(tempfile,FileMOde.Open,FileAcess.Read,FileShare.ReadWrite)

这就可以打开

但这样就打不开
fileStream fs = new FileStream(tempfile,FileMOde.Open,FileAcess.Read,FileShare.Read)

我看文档说最后一个参数是对其它进程的操作有影响,为什么对自己的操作也有影响??

谢谢
...全文
106 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘志伟_ 2016-02-18
  • 打赏
  • 举报
回复
引用 4 楼 qbilbo的回复:
至于你举的例子,ReadWrite时,要让别的进程能读写,那自己就不能独占此文件,所以在Excel打开后反而能打开了。 在Read时,由于不允许别的文件写,那就要对这个文件独占写的权限,所以反而打不开了。 FileShare可以理解成对文件的读写权限控制,而FileAccess可以理解成文件打开后,这个流的读写权限。
明白了,也就是说,第三个参数是read是,其实是需要获得文件的独占锁的,而此时文件已经被Excel打开了,获取独占锁是不可能了,所以报错了。相反为readwrite是要获得共享锁,恰巧就可以了。 谢谢了,茅塞顿开!!!!!!
qbilbo 2016-02-18
  • 打赏
  • 举报
回复
至于你举的例子,ReadWrite时,要让别的进程能读写,那自己就不能独占此文件,所以在Excel打开后反而能打开了。 在Read时,由于不允许别的文件写,那就要对这个文件独占写的权限,所以反而打不开了。 FileShare可以理解成对文件的读写权限控制,而FileAccess可以理解成文件打开后,这个流的读写权限。
qbilbo 2016-02-18
  • 打赏
  • 举报
回复
你应该这样来试。 一,让别人只读
using (FileStream fs = new FileStream(tempfile, FileMode.Open, FileAccess.Read, FileShare.Read))
{
        MessageBox.Show("已打开文件。");
}
先运行段代码,弹出对话框后不要关闭,用Excel打开这个文件,你会发现Excel提示只能以只读方式打开。 二,让别人可以读写
using (FileStream fs = new FileStream(tempfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
        MessageBox.Show("已打开文件。");
}
] 先运行段代码,弹出对话框后不要关闭,用Excel打开这个文件,你会发现Excel就不会有只读提示,即可以读写。
刘志伟_ 2016-02-18
  • 打赏
  • 举报
回复
我试了,可以。是只读打开的
Justin-Liu 2016-02-18
  • 打赏
  • 举报
回复
文件被office进程占用了 还能打开?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧