2011-01-25 105 views
0

我试图保存一个文件,我从邮箱下载。这种处理不当出现过什么问题,但现在我心中已经在我的潜行内置的GUI我得到和授权例外:C#IO异常

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我在一个简单的文本框中输入FOLDERPATH。 (通过的FolderBrowserDialog)

第二个编辑:

进出口运行过程中出现这对Windows 7和2010年VS THX 任何帮助! /Marthin

+0

这是什么样的GUI? – BrokenGlass 2011-01-25 20:44:58

+0

它是一个Windows应用程序,用户在那里填写连接信息到交换服务器,并将包含一些和csv文件的邮件下载并解析到数据库中。 – Marthin 2011-01-25 20:51:22

回答

1

保存的文件:C:\ TempNorlander

您试图保存具有相同名称的文件夹中的文件。这是不允许的,UnauthorizedAccessException是结果。修复文件名称,例如C:\ TempNorlander \ mumble.txt

1

的错误是很清楚的:

访问路径 'C:\ TempNorlander' 被拒绝。

运行此过程的用户没有访问此文件夹的权限。

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

1

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

  1. 解决这个问题特别允许的程序池 访问该文件夹/文件在资源管理器中
  2. 加入 权利
  3. 使用impersonation读取文件 根据不同 用户的凭据
  4. 通过创建 另一个应用程序池或changing the identity现有的应用程序在IIS中为您的 应用程序使用不同的标识。

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

+0

这是一个Windows应用程序。 – Marthin 2011-01-25 20:49:00

0

可能的原因:

  1. 你不能真正的C语言创建一个文件:(其中,顺便说一句,你不应该)
  2. 您已经有打开文件在任何其他进程或在您的应用程序
  3. 您正在试图覆盖现有文件,无法

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

例如,如果这是一个桌面应用程序,你需要创建一个用于保存数据的临时文件,你想使用Path.GetTempFileName了点。