1

早晨,

我正在尝试在桌面上的文件夹中创建一些文本文件,但收到一条消息,提示“UnauthorizedAccessException 未处理”错误,拒绝访问路径“C:\MSGTEST”。

我不明白为什么我会收到此消息:

  • 我拥有对该目录的完全访问权限。
  • UAC 已关闭。
  • 我是本地管理员。

有人能告诉我为什么会这样吗?

该程序在以下行中炸弹:

using (FileStream MSGFiles = new FileStream(MSGRootPath, FileMode.OpenOrCreate, FileAccess.Write))

我将文本文件写入目录的代码:

using (FileStream MSGFiles = new FileStream(MSGRootPath, FileMode.OpenOrCreate, FileAccess.Write))
    using (StreamWriter sw = new StreamWriter(MSGFiles))
    {

        while (readerObj.Read())
        {
            SqlMsg = readerObj["Msg"].ToString();
            SqlRef = readerObj["Reference"].ToString();
            SqlType = readerObj["Type"].ToString();
            //SqlTime = readerObj["Time"].ToString();

            //SqlTime = SqlTime.Replace(":", "-");
            //SqlTime = SqlTime.Replace("/", "-");

            sw.WriteLine(SqlRef + "_" + SqlType + ".txt");

异常错误:

System.UnauthorizedAccessException 未处理 HResult=-2147024891 消息=对路径“C:\MSGTEST”的访问被拒绝。Source=mscorlib StackTrace: 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 选项、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath、Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) at SwiftMSGDownload.Form1.subGetMSGs() in c:\Users \nasswee\Documents\Visual Studio 2012\Projects\SwiftMSGDownload\SwiftMSGDownload\Form1.cs:SwiftMSGDownload.Form1.btnStart_Click 处的第 47 行(对象发件人,

有任何想法吗?

4

3 回答 3

1

此问题的最快解决方案是允许每个人对此路径“C:\MSGTEST”的完全权限(这是一个主要的安全问题)正确的方法是根据您的 IIS 版本仅允许 IUSR 或 IIS_IUSERS 的权限

看看下面的链接

于 2014-02-04T16:41:41.397 回答
1

即使您是本地管理员,您也可能不会“以管理员身份”运行程序

如果要以管理员身份调试程序,请右键单击 Visual Studio,然后选择“以管理员身份运行”。

于 2014-02-04T16:38:40.817 回答
0

我不确定 MSGRootPath 指向的确切位置,但我怀疑它包含错误报告中的值“C:\MSGTEST”。如果是这种情况,您将收到此异常,因为 Windows 不允许您像您尝试的那样直接写入文件夹。(如,打开文件夹进行写作是不可能的,我不知道他们为什么决定让它抛出 UnauthorizedAccessException )

在阅读您对另一个答案的评论后,这可能会起作用:在 while 循环中打开文件流,而不是使用 name MSGRootPath + SqlRef + "_" + SqlType + ".txt"

于 2017-07-20T13:25:29.953 回答