【问题标题】:C# IO ExceptionC# IO 异常
【发布时间】:2011-01-25 20:38:23
【问题描述】:

我正在尝试保存从邮箱下载的文件。这没有任何问题,但现在我已经在我的模型上构建了一个 GUI,我得到了授权异常:

Saved file: C:\TempNorlander
System.UnauthorizedAccessException: Access to the path 'C:\TempNorlander' is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode)
   at a.a0.b(String A_0, Byte[] A_1, Int32 A_2, Int32 A_3)
   at MailBee.Mime.Attachment.Save(String filename, Boolean overwrite)
   at Mail2DB.Connect2Exchange.CollectData() in C:\Users\marthin\documents\visual studio 2010\Projects\Mail2DB\Mail2DB\Connect2Exchange.cs:line 210

我无法弄清楚这里有什么问题。在文件夹 iv 中,所有可能的用户都拥有所有权限。

编辑:

我忘了提到现在使用 GUI 我在一个简单的文本框中输入文件夹路径。 (通过 FolderBrowserDialog)

第二次编辑:

我在 Windows 7 和 VS 2010 上运行这个。 感谢您的帮助! /马丁

【问题讨论】:

  • 它是一个 Windows 应用程序,用户在那里填写与交换服务器的连接信息,然后将带有一些和 csv 文件的邮件下载并解析到数据库中。

标签: c# exception io


【解决方案1】:

保存的文件:C:\TempNorlander

您正在尝试保存与文件夹同名的文件。这是不允许的,结果是 UnauthorizedAccessException。将文件名固定为 C:\TempNorlander\mumble.txt

【讨论】:

  • 你的正确,由于某种原因我的路径不正确。我使用 3:dpart 库来处理所有路径和节省。我猜应该更好地阅读manuell。感谢您的帮助!
【解决方案2】:

错误很明显:

对路径“C:\TempNorlander”的访问被拒绝。

运行此进程的用户无权访问此文件夹。

要么给这个用户正确的权限,要么使用已经拥有权限的用户启动程序。

【讨论】:

    【解决方案3】:

    假设这是一个 Web 项目 - 默认情况下,您的项目将在 IIS DefaultAppPool 下运行,它无权读取 HD 上的任意文件。您可以通过

    解决此问题
    1. 专门允许 AppPool 通过添加访问文件夹/文件 Explorer 中的权限
    2. 使用impersonation读取文件 在不同的凭据下 用户
    3. 为您的用户使用不同的身份 通过在 IIS 中创建应用程序 另一个应用程序池或现有应用程序池的changing the identity

    如果您的 GUI 不是 Web 项目,第 2 点仍然适用 - 您需要模拟对文件夹/文件具有读取权限的用户,或将这些权限添加到运行您的应用程序的用户。

    【讨论】:

    • 这是一个 Windows 应用程序。
    【解决方案4】:

    可能的原因:

    1. 您不能真正在 C 中创建文件:(顺便说一句,您不应该这样做)
    2. 您已经在另一个进程或您的应用中打开了该文件
    3. 您正试图覆盖现有文件,但不能

    也许您想要解决您真正想要完成的任务。 例如,将一些数据保存到可以在同一会话中访问的临时文件中。或者附加到 ASP.NET 应用程序的持久数据文件中,以便在以后的调用中访问。

    例如,如果这是一个桌面应用程序,并且您需要创建一个临时文件来保存数据,那么您需要为此使用 Path.GetTempFileName

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2020-09-13
      • 2013-05-18
      相关资源
      最近更新 更多