【问题标题】:c#: Why does opening a read-only file for read access failsc#:为什么打开只读文件进行读访问失败
【发布时间】:2015-08-11 04:09:53
【问题描述】:

我正在尝试在 Windows 服务中打开文件。但是我收到拒绝访问错误。 我正在使用下面的代码。

FileStream stream = File.Open('sample.txt', 
FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

正如您在此处看到的,我仅以读取权限打开。并且该文件已经在属性对话框中检查了只读权限。但是,我仍然不明白为什么我会收到这个错误。

提前致谢

【问题讨论】:

  • 会不会是运行代码的用户没有读取这个文件的权限?
  • 你能发布确切的例外吗?您可以尝试以管理员身份运行您的应用程序吗?文件是否正在被其他程序访问?
  • 另外,您是否正在处理文件流?也许它仍然在内存中的某个地方打开......
  • 如何找到运行代码的用户以及该用户的权限?
  • 不,我没有处理。只是我只添加了这一行代码。得到这个异常:System.UnauthorizedAccessException

标签: c# file-io


【解决方案1】:

尝试以下方法:

确保通过将文件流包装在 using 语句中来处理文件流:

using (FileStream stream = File.Open('sample.exe', FileMode.Open, FileAccess.Read, FileShare.Read)) 
{
}

另外,请尝试在 Open 语句中添加 FileShare.Read 而不是 FileShare.ReadWrite 作为参数,因为 FileAccess 设置为读取。

确保用户有权访问该文件:右键单击该文件并检查安全选项卡 - 将读取设置为“所有人”。如果这不起作用,请将“完全控制”设置为“所有人”作为健全性测试。

【讨论】:

  • 但是当我在 VS 中创建一个新项目并添加相同的代码时,它工作正常。你能解释一下为什么吗?
  • 所以它现在工作了吗? FileShare 参数略有不同。当 FileAccess 设置为 Read 时,您使用的是 ReadWrite,我发布的是使用 Read。
  • 两个 FileShare 都在新项目中工作。但两者都不适用于旧版本。特定项目的权限有何不同?
  • 老实说,在 NotePad++ 中做一个文件比较或其他东西来找出差异。它可能是参考,或文件权限或其他东西。没有更多信息,我无能为力 - 你只提供了一行代码。
  • 我用这行代码创建了一个类库。当我将这个类库添加到我的项目中时,它不起作用。但是当我创建一个独立的项目时,相同的代码正在运行(我之前的回复不正确。我只尝试了 FileShare.Read 在两者中)
猜你喜欢
  • 1970-01-01
  • 2014-06-01
  • 2015-01-22
  • 1970-01-01
  • 2014-04-19
  • 2019-09-30
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多