- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用以下代码打开我之前在用户的 %TEMP% 文件夹中创建的用于阅读的文件:
new FileStream(cacheFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete);
在某些用户的计算机上,这有时会引发 UnauthorizedAccessException 并显示消息“访问路径...被拒绝”。我无法重现这一点。我最初的猜测是反病毒或索引引擎正在做一些奇怪的事情,但我也注意到这段代码正在使用“FileShare.Delete”,我不确定它应该在那里。
是否存在使用“FileShare.Delete”导致 UnauthorizedAccessException 的情况?
最佳答案
是的,FileShare.Delete 往往会导致此问题。由在后台运行并扫描文件的任何程序使用,文件索引器和病毒扫描程序是常见的例子。
FileShare.Delete 允许另一个进程删除文件,即使后台进程仍然打开文件并从中读取文件。其他进程不会注意到该文件实际上并没有消失,因为它知道该文件实际上已被删除。
当其他进程依赖于实际被删除的文件并执行其他操作时,问题就开始了。通常通过创建具有相同名称的新文件来触发。值得注意的是一种非常不明智的文件保存方式,因为当保存失败时,如果没有备份,会导致数据完全丢失,但这种错误很常见。
这将失败,因为该文件的目录条目仍然存在,它不会消失,直到打开该文件的最后一个进程关闭句柄。任何其他尝试再次打开该文件的进程都将收到错误 5“访问被拒绝”。包括删除文件并尝试重新创建文件的进程。
解决方法是始终使用“事务性”保存,在尝试覆盖之前重命名文件。在 .NET 中可用 File.Replace(),在 native winapi 中可用 ReplaceFile()。手工也很容易完成,工作流程是:
第 2 步确保永远不会有任何数据丢失,如果出现任何问题,原始文件将保持完整。第 4 步确保 FileShare.Delete 将按预期工作,备份文件最终会在其他进程关闭其句柄时消失。
关于c# - 使用 FileShare.Delete 会导致 UnauthorizedAccessException 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19875329/
我在使用 NUnit 和 WatiN 运行任何测试时收到 UnauthorizedAccessException 错误: Test Test.IndexTests.Can_Do' failed: Wa
使用这段代码: DirectoryInfo info = new DirectoryInfo("\\s01\sharedfolder\folder"); FileInfo[] files = info
我正在创建一个应用程序来查找文件中的重复项。当我搜索文件时: try { string[] allFiles = Directory.GetFiles( directoryPa
我在指定位置创建一个目录,然后尝试使用 StreamWriter 访问它,但它一直显示“访问被拒绝。” 有人知道会发生什么吗? 我的代码是这样的: if (!Directory.Exists(
根据 MSDN,Directory.Exists如果目录不可访问,则应返回 false。我有一个 Directory.Exists 返回 true 但 Directory.GetFiles 抛出 Sy
我正在尝试遍历开始菜单上的项目,但我一直收到 UnauthorizedAccessException。我是目录的所有者,我的用户是管理员。 这是我的方法(它在一个 dll 项目中): // root
我有 ASP Web API,我正在尝试从那里的调用返回一个文件。 在我的服务器上,我不断收到错误: System.UnauthorizedAccessException: Access to the
我有一个简单的方法来计算目录和其中所有文件的大小。这是代码: using System; using System.IO; namespace MyProject.Libs { public
当我试图在 Registry.ClassesRoot 中创建一个子项时,我得到一个 System.UnauthorizedAccessException!我用的是win7。有谁知道为什么吗? 最佳答案
我正在 COM 端口上进行 C# 编码,我无法理解这个异常的含义,我试图在我的书和网上找到答案,但没有好消息。 所以我的问题是如何找到正确的异常名称的定义(我从网上复制了这段代码)。2. 这个前任是什
在读取或写入(创建文件)到随机文件夹时,我收到随机用户关于 UnauthorizedAccessException 的随机报告。通常放在自己的Documents文件夹中。而更多的问题是,当应用程序无法
我正在编写回归测试,需要手动将文件从一个位置移动到另一个位置。每次发生 UnauthorizedAccessException 时,我假设这与必须从中移动文件的文件夹的权限有关?我检查了文件属性,它没
我在尝试打开互斥量时遇到此异常(它只是有时发生;大多数调用都是成功的): System.UnauthorizedAccessException: Access to the path 'Global\
我有一个应用程序正在通过一些文件查找旧数据。为了确保我们不会破坏好的项目,我将文件复制到一个临时位置。我检查的一些目录是源代码目录,它们有 .svn 文件夹。我们使用 Subversion 来管理我们
偶尔,我的一些集成测试会因上述消息而失败。我正在使用下面的代码来准备端口。 for(int i = 0; i < 5; i++) {
我正在尝试通过这种方式从文件夹中获取所有文件: try { string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedP
这个问题在这里已经有了答案: DeleteSubKey UnauthorizedAccessException (1 个回答) 关闭 5 年前。 我有一个 C# 应用程序,我正在尝试通过注册表编辑服
我正在尝试编写一个快应用来修改一些注册表项。当我通过 RegEdit 浏览时,我可以毫无问题地修改和删除 key 。 但是当我尝试使用 RegistryKey.DeleteSubKey() 时,它会抛
我正在研究如何将 Windows 上下文菜单中的快捷方式 添加到我的应用程序。我遇到了this文章,我试过了。这是它用于在注册表中创建 key 的代码。 private void btnAddMenu
在我拥有的 Windows 应用程序中,我在注册表中进行了一些更改,例如删除特定键,在某些测试场景中,例如在安装了 UAC 的 Vista 机器中,我得到了 System.UnauthorizedAc
我是一名优秀的程序员,十分优秀!