Доступ запрещен для записи в папку, почему?

Утро,

Я пытаюсь создать некоторые текстовые файлы в папку на моем рабочем столе, но я получаю сообщение о том, что ошибка "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) в System.IO.FileStream.Init (путь String, режим FileMode, доступ к FileAccess, права Int32, логические значения useRights, общий ресурс FileShare, Int32 bufferSize, Параметры FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) в System.IO.FileStream..ctor (путь String, режим FileMode, доступ к FileAccess) в SwiftMSGDownload.Form1.subGetMSGs() в c:\Users\nasswee\Documents\Visual Studio 2012\Projects\SwiftMSGDownload\SwiftMSGDownload\Form1.cs: строка 47 в SwiftMSGDownload.Form1.btnStart_Click (отправитель объекта, EventArgs e) в c:\Users\nasswee\Documents\Visual Studio 2012\Projects\SwiftMSGDownload\SwiftMSGDownload\Form1.cs: строка 99 в System.Windows.Forms.Control.OnClick(EventArgs e) в System.Windows.Forms.Button.OnClick(EventArgs e) в System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) в System.Windows.Forms.Control.WmMouseUp(Message & m, Mous кнопка ********, клики Int32) в System.Windows.Forms.Control.WndProc(Message & m) в System.Windows.Forms.ButtonBase.WndProc(Message & m) в System.Windows.Forms.Button.WndProc(Message & m) в системе.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message & m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message & m) в System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) в System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG & msg) в System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner (причина Int32, контекст ApplicationContext) в System.Windows.Forms.Application.ThreadContext.RunMessageLoop (причина Int32, контекст ApplicationContext) в System.Windows.Forms.Application.Run (форма mainForm ) на SwiftMSGDownload.Prog ram.Main() в c:\Users\nasswee\Documents\Visual Studio 2012\Projects\SwiftMSGDownload\SwiftMSGDownload\Program.cs: строка 18 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, String [] args) в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String [] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта) в System.Threading.ExecutionContext.RunInternal(ExecutionContext executeContext, ContextCallback callback, состояние объекта, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run (Исполнение ИсполнениеКонтекстКонтекст, Обратный вызов ContextCallback, Состояние объекта, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run (ИсполнениеКонтекстовое исполнениеКонтекст, ContextCallback callback, Состояние объекта) в системе.Threading.ThreadHelper.ThreadStart() InnerException:

Есть идеи?

3 ответа

Даже если вы локальный администратор, возможно, вы не используете свою программу "как администратор",

Щелкните правой кнопкой мыши на Visual studio и выберите "запустить как администратор", если вы хотите отлаживать свою программу в качестве администратора.


самым быстрым решением этой проблемы является предоставление полного разрешения всем на этот путь "C:\MSGTEST" (это серьезная проблема безопасности). Правильный подход заключается в том, чтобы позволить persmisions onle IUSR или IIS_IUSERS в зависимости от вашей версии IIS

взгляните на следующую ссылку


Я не уверен точно, на что указывает MSGRootPath, но я подозреваю, что он содержит значение "C:\MSGTEST" из отчета об ошибке. Если это так, вы получаете это исключение, потому что Windows не позволяет вам писать в папку, как будто вы пытаетесь. (Как и в, открытие папок для записи невозможно, я понятия не имею, почему они решили заставить его выкинуть UnauthorizedAccessException через)

После прочтения ваших комментариев по другому ответу это может сработать: открыть потоки файлов внутри цикла while вместо имени MSGRootPath + SqlRef + "_" + SqlType + ".txt".

licensed under cc by-sa 3.0 with attribution.