ทำไมการเข้าถึงเส้นทางจึงถูกปฏิเสธ


156

ฉันมีปัญหาในการพยายามลบไฟล์ของฉัน แต่ได้รับการยกเว้น

if (result == "Success")
{
     if (FileUpload.HasFile)
     {
         try
         {
              File.Delete(Request.PhysicalApplicationPath + app_settings.login_images + txtUploadStatus.Text);
              string filename = Path.GetFileName(btnFileUpload.FileName);
              btnFileUpload.SaveAs(Request.PhysicalApplicationPath + app_settings.login_images + filename);
         }
         catch (Exception ex)
         {
               Message(ex.ToString());
         }
      }
}

นอกจากนี้ฉันควรทราบว่าโฟลเดอร์ที่ฉันพยายามลบนั้นสามารถควบคุมบริการเครือข่ายได้อย่างสมบูรณ์

ข้อความยกเว้นทั้งหมดคือ:

System.UnauthorizedAccessException: การเข้าถึงพา ธ 'C: \ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ hybrid \ temp_loginimages \ enviromental.jpg' ถูกปฏิเสธ ที่ System.IO .__ Error.WinIOError (Int32 errorCode, String บางที FullPath) ที่ System.IO.File.Delete (เส้นทาง String) ที่ไฮบริดผู้ใช้ _Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs: บรรทัด 242

ความคิดใด ๆ


4
มีอะไรไม่ชัดเจนเกี่ยวกับข้อยกเว้น? บัญชีที่แอปพลิเคชันทำงานอยู่ไม่มีสิทธิ์การเข้าถึงไฟล์ / โฟลเดอร์
Oded

8
ฉันเข้าใจสิ่งที่ข้อยกเว้นพูด ปัญหาคือฟังก์ชั่นนี้ใช้งานโดยผู้ใช้บางคนที่จำเป็นต้องแก้ไขภาพโดยใช้ระบบ ส่วนหนึ่งคือการแทนที่ภาพด้วยการลบภาพเก่าและบันทึกภาพใหม่
Nick gowdy

ตรวจสอบสิทธิ์การเข้าถึงโฟลเดอร์ของคุณ ให้สิทธิ์ที่ถูกต้องกับโฟลเดอร์โดยใช้แท็บความปลอดภัยจากหน้าต่างคุณสมบัติ
gasroot

6
ข้อยกเว้นนี้ไม่มีข้อมูลเลย ไม่ได้บอกคุณ: A. ผู้ใดพยายามเข้าถึงทรัพยากรหลัก B. ต้องได้รับอนุญาตอะไรบ้าง ในการค้นหาจำเป็นต้องติดตั้ง Windows SysInternals และตรวจสอบการเข้าถึงพา ธ
ATL_DEV

คำตอบ:


184

ตามไฟล์วิธีการลบ ...

An UnauthorizedAccessExceptionหมายถึงหนึ่งใน 4 สิ่ง:

  • ผู้โทรไม่มีสิทธิ์ที่จำเป็น
  • ไฟล์นี้เป็นไฟล์ปฏิบัติการที่ใช้งานอยู่
  • เส้นทางเป็นไดเรกทอรี
  • เส้นทางระบุไฟล์แบบอ่านอย่างเดียว

77
เส้นทางเป็นไดเรกทอรี น่าอายสำหรับฉัน: /
ต่อ G

4
เกิดขึ้นกับผมเมื่อวานนี้facepalm ฉันเกลียดข้อความข้อยกเว้นที่คลุมเครือนี้ :(
Broken_Window

1
ฉันกำลังดิ้นรนมานานกว่า 6 ชั่วโมงและหลังจากดูคำตอบของคุณแล้วเห็นว่าเส้นทางนั้นเป็นไดเรกทอรี ... ขอบคุณตัน @CrazyTim ..
ผู้ใช้ M

6
Path is a directory.ขอบคุณสำหรับเคล็ดลับนี้ :) มันช่วยฉัน
Sidron

8
โอ้ ... เส้นทางของฉันเป็นไดเรกทอรี ขอบคุณ Microsoft นั่นเป็นการเข้าถึงที่ไม่ได้รับอนุญาตมาก
SeriousM

181

ฉันมีปัญหาด้วยดังนั้นฉันจึงสะดุดในโพสต์นี้ ฉันเพิ่มบรรทัดของรหัสต่อไปนี้ก่อนและหลังการคัดลอก / ลบ

ลบ

File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);

สำเนา

File.Copy(file, dest, true);
File.SetAttributes(dest, FileAttributes.Normal);

17
ฉันให้สิทธิ์ทั้งหมดกับทุกคนในโฟลเดอร์ที่ไม่ประสบความสำเร็จ อย่างไรก็ตามคุณลักษณะไฟล์เหล่านี้ยังใช้งานได้ ขอบคุณ ในที่สุดฉันก็หวังว่า MS จะเข้าสู่รูปแบบการรักษาความปลอดภัยที่เหมาะสม พยายามคิดให้ออกว่าเหตุใดการคัดลอก / ลบระเบิดทุก ๆ สองสามปีจึงน่าผิดหวังที่พูดน้อยที่สุด
Steve

13
SetAttributes Normal เป็นกลอุบายสำหรับฉัน - ฉันพยายาม File.Copy และเขียนทับไฟล์แบบอ่านอย่างเดียว ..
Tom Hunter

6
การเข้าถึงพา ธ ถูกปฏิเสธไม่แนะนำว่าไฟล์นั้นเป็นแบบอ่านอย่างเดียว (เนื่องจากคุณมีสิทธิ์เข้าถึงพา ธ จริงๆ!) ในความเห็นของฉันข้อความแสดงข้อผิดพลาดควรเปลี่ยน ขอบคุณสำหรับคำใบ้ต่อไป!
MBoros

1
ฉันรันโปรแกรมในฐานะผู้ดูแลระบบและปัญหาก็หายไป
Santiago Villafuerte

5
การตั้งค่าแอตทริบิวต์หลังจากการดำเนินการคัดลอกช่วยได้อย่างไร โปรแกรมจะขัดข้องกับคำสั่ง copy หรือไม่ ควรเป็นก่อนการดำเนินการคัดลอกเหมือนการลบหรือไม่
Vibhore Tanwer

31

นี่เป็นปัญหาเก่า แต่ฉันพบขณะค้นหา ปรากฎว่าฉันขาดส่วนประกอบชื่อไฟล์จริงในพา ธ การบันทึกสำหรับ SaveAs ...

string uploadPath = Server.MapPath("~/uploads");
file.SaveAs(uploadPath); // BAD
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD

18

เมื่อผู้ใช้พยายามเชื่อมต่อกับเว็บไซต์ของคุณ IIS กำหนดการเชื่อมต่อกับบัญชีIUSER_ComputerNameโดยที่ ComputerName เป็นชื่อของเซิร์ฟเวอร์ที่ IIS กำลังทำงานอยู่ โดยค่าเริ่มต้นบัญชีIUSER_ComputerNameเป็นสมาชิกของกลุ่มแขก กลุ่มนี้มีข้อ จำกัด ด้านความปลอดภัย ลองใช้การเข้าถึงยิ่งใหญ่ไปยัง IUSER_ComputerName ไปยังโฟลเดอร์นั้น

นี่คือคำตอบที่ดีมากเกี่ยวกับการรักษาความปลอดภัย IIS

หวังว่านี่จะช่วยได้


ขอบคุณสิ่งนี้ช่วยได้ .. การอนุญาตสำหรับผู้ใช้ IIS_IUSRS
ทอม

13

คลิกขวาที่ Visual Studio แล้วคลิก Run as Administrator


นี่เป็นวิธีแก้ปัญหาสำหรับปัญหา File.Move ของฉันบนเครื่อง Windows 8.1 Enterprise ที่ฉันเป็นผู้ดูแลระบบท้องถิ่นและไม่มีอะไรจัดการกับไฟล์
Robert Kerr

13

ฉันได้รับข้อผิดพลาดเนื่องจากฉันไม่ทราบว่าปลายทางควรเป็นไฟล์ ฉันมีโฟลเดอร์เป็นพารามิเตอร์ที่สอง (ซึ่งทำงานใน cmd) และฉันได้Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied.เพราะ C # File.Moveต้องการไฟล์ที่มีไม่เพียง แต่สำหรับพารามิเตอร์แรก แต่สำหรับสองเกินไปและดังนั้นหากคุณใส่ไดเรกทอรีเป็นพารามิเตอร์ที่สองก็พยายามที่จะเขียนไฟล์เช่นเมื่อคุณมีไดเรกทอรีที่เรียกว่าc:\crpc:\crp

สิ่งนี้จะไม่ถูกต้อง File.Move(args[0],"c:\\crp");

ดังนั้นนี่จะถูกต้อง File.Move(args[0],"c:\\crp\\a.a");

เช่นเดียวกับ File.Copy


1
ขอบคุณ! วิธีนี้แก้ปัญหาทางอ้อมที่ API คาดหวังว่าปลายทางที่ฉันให้ไว้เป็นไดเรกทอรีไม่ทราบว่าจะต้องรวมชื่อไฟล์ (เนื่องจากวัตถุนั้นมีชื่อไฟล์ที่เกี่ยวข้อง)
Austin Salgat

7

หากนี่คือเว็บไซต์ IIS ที่มีปัญหาให้ตรวจสอบคุณสมบัติผู้ใช้อีเมลของการตั้งค่าขั้นสูงสำหรับกลุ่มแอปพลิเคชันที่ไซต์หรือแอปพลิเคชันใช้ คุณอาจพบว่ามันถูกตั้งค่าเป็น ApplicationPoolIdentity และในกรณีนั้นนี่คือผู้ใช้ที่จะต้องมีการเข้าถึงเส้นทาง

หรือคุณสามารถใช้รูปแบบเก่าและตั้ง Identity to Network Service และให้ผู้ใช้บริการเครือข่ายเข้าถึงพา ธ


3

คุณต้องแก้ไขสิทธิ์ของโฟลเดอร์ที่คุณพยายามลบจาก / บันทึกเป็น คลิกขวาที่โฟลเดอร์ที่มีและใช้แท็บความปลอดภัยเพื่ออนุญาตให้แก้ไขสิทธิ์สำหรับผู้ใช้ที่แอปพลิเคชันของคุณทำงาน


คุณกำลังสมมติว่าเขาเป็นผู้ดูแลระบบของเครื่องของเขา .. ถ้านี่เป็นเครื่องทำงานและเขาก็เป็นแค่ผู้ใช้ .. พวกเขาอาจตั้งค่าการอนุญาตด้วยวิธีนั้นด้วยเหตุผล .. เนื่องจากเราเหลือเพียงแค่จะสันนิษฐานเท่านั้น
MethodMan

1
มันเป็นเครื่องทำงานและฉันเป็นผู้ใช้ที่มีพลัง ฉันไม่ได้เข้าสู่ระบบในฐานะผู้ดูแล คุณสมบัติของโฟลเดอร์ภาพได้รับการแก้ไขเพื่อให้บริการเครือข่ายมีการเข้าถึงแบบเต็ม แต่นั่นก็ไม่ได้สร้างความแตกต่าง
Nick gowdy

1
ฉันเพิ่งเพิ่ม "ทุกคน" ด้วยการเข้าถึงโฟลเดอร์และ "voilá" เต็มรูปแบบ
MarceloBarbosa

3

ข้อยกเว้นที่ถูกส่งออกมาเมื่อระบบปฏิบัติการปฏิเสธการเข้าถึงเนื่องจากข้อผิดพลาด I / O หรือข้อผิดพลาดด้านความปลอดภัยชนิดที่ระบุ

ฉันตีสิ่งเดียวกัน ตรวจสอบเพื่อให้แน่ใจว่าไฟล์ไม่ถูกซ่อน


3

ฉันยังต้องเผชิญกับปัญหานี้เมื่อบริการหน้าต่างของฉันเริ่มโยนข้อยกเว้น

System.UnauthorizedAccessException: Access to the path "C:\\Order\\Media
44aa4857-3bac-4a18-a307-820450361662.mp4" is denied.

ดังนั้นวิธีการแก้ไขฉันตรวจสอบบัญชีผู้ใช้ที่เชื่อมโยงกับบริการของฉันดังที่แสดงในภาพด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นในกรณีของฉันมันเป็นบริการเครือข่าย

จากนั้นไปที่คุณสมบัติโฟลเดอร์เพื่อตรวจสอบว่าบัญชีผู้ใช้ที่เกี่ยวข้องนั้นมีอยู่ภายใต้แท็บการอนุญาตของพวกเขาหรือไม่ มันหายไปในกรณีของฉันและเมื่อฉันเพิ่มและแก้ไขปัญหาของฉัน

สำหรับข้อมูลเพิ่มเติมโปรดตรวจสอบการจับภาพหน้าจอด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่


3

ปัญหาเดียวกันสำหรับฉันเช่นกันฉันกำลังชี้โฟลเดอร์แทนไฟล์

ดังนั้นตรวจสอบให้แน่ใจในเส้นทางให้เส้นทาง + ชื่อไฟล์

System.IO.File.WriteAllBytes("path", bytearray);

2

ตรวจสอบคุณสมบัติของไฟล์ของคุณ หากทำเครื่องหมายอ่านอย่างเดียวให้ยกเลิกการเลือก นี่เป็นปัญหาส่วนตัวของฉันกับ UnauthorizedAccessException


2

ฉันได้รับข้อผิดพลาดนี้และแก้ไขได้ในเวลาไม่นาน ไม่ทราบว่าทำไมโฟลเดอร์ทั้งหมดของฉันเป็นแบบอ่านอย่างเดียว, ฉันยกเลิกแบบอ่านอย่างเดียวและใช้มัน อย่างไรก็ตามมันยังคงเป็นแบบอ่านอย่างเดียว ดังนั้นฉันจึงย้ายไฟล์ไปไว้ในโฟลเดอร์รากทำงานได้แปลกมาก


2

มีข้อผิดพลาด UnauthorizedAccessException เกิดขึ้นเมื่อระบบปฏิบัติการปฏิเสธการเข้าถึงเนื่องจากข้อผิดพลาด I / O หรือข้อผิดพลาดด้านความปลอดภัย

ถ้าคุณกำลังพยายามที่จะเข้าถึงไฟล์หรือรีจิสทรีคีย์ให้แน่ใจว่าจะไม่ได้อ่านอย่างเดียว


2

หากคุณใช้ BitDefender อาจเป็นไปได้ว่าคุณสมบัติSafe Filesจะบล็อกการทำงานของคุณ นี่คือรูปแบบหนึ่งของการป้องกัน Ransomware ที่มาพร้อมกับรุ่นที่สูงขึ้นบางส่วน

ตรวจสอบให้แน่ใจว่าให้สิทธิ์การเข้าถึงแอปพลิเคชันของคุณใน BitDefender แล้วลองอีกครั้ง

บางรายละเอียดเพิ่มเติมสามารถพบได้ในหน้าให้ความช่วยเหลือ BitDefender นี้


1

ฉันมีปัญหาเดียวกันกับเว็บไซต์ที่เพิ่งย้ายใหม่บนเซิร์ฟเวอร์ที่ใช้ร่วมกัน แก้ไขผ่านการตั้งค่าแผงเว็บโฮสต์ (DotNetPanel) จริง "อนุญาตให้เขียน" ดังนั้นหากคุณอยู่ในเซิร์ฟเวอร์ที่ใช้ร่วมกันก่อนที่จะตรวจสอบรหัสทั้งหมดที่มีมูลค่าดูที่การกำหนดค่าเซิร์ฟเวอร์และสามารถประหยัดเวลาได้มาก


1

โปรดระวังว่าหากคุณพยายามเข้าถึงเส้นทางโฟลเดอร์ที่แชร์จากรหัสของคุณคุณไม่จำเป็นต้องให้สิทธิ์ที่ถูกต้องกับโฟลเดอร์ฟิสิคัลผ่านแท็บความปลอดภัย คุณต้อง "แชร์" โฟลเดอร์ด้วยผู้ใช้กลุ่มแอพที่เกี่ยวข้องผ่านแท็บแชร์


1

ฉันกำลังเผชิญกับข้อผิดพลาดนี้เพราะ

บางครั้งเมื่อฉันเส้นทางที่มีชื่อไฟล์และCombineFileName = ""

มันPath Directoryไม่ใช่fileปัญหาที่กล่าวมาข้างต้น

ดังนั้นคุณต้องตรวจสอบFileNameเช่นนี้

if(itemUri!="")
        File.Delete(Path.Combine(RemoteDirectoryPath, itemUri));

1

ฉันมีข้อผิดพลาดที่แน่นอนเมื่อทำการลบไฟล์ เป็นบริการ Windows ที่ทำงานภายใต้บัญชีบริการซึ่งไม่สามารถลบเอกสาร. pdf จากโฟลเดอร์แชร์ได้แม้ว่าจะมีการควบคุมโฟลเดอร์แบบเต็ม

สิ่งที่ใช้ได้ผลสำหรับฉันคือการนำทางไปที่แท็บความปลอดภัยของโฟลเดอร์แชร์> ขั้นสูง> แชร์> เพิ่ม

ฉันเพิ่มบัญชีบริการลงในกลุ่มผู้ดูแลระบบแล้วนำการเปลี่ยนแปลงไปใช้และบัญชีบริการก็สามารถดำเนินการทั้งหมดในไฟล์ทั้งหมดภายในโฟลเดอร์นั้นได้


1

สำหรับผู้ที่พยายามสร้างแอพพลิเคชั่น UWP (Universal Windows) การอนุญาตไฟล์จะถูก จำกัด มากขึ้นและโดยทั่วไปจะถูกปฏิเสธโดยค่าเริ่มต้น นอกจากนี้ยังแทนที่สิทธิ์ผู้ใช้ระบบ โดยทั่วไปคุณจะสามารถเข้าถึงไฟล์ในทั้งสอง

  • ตำแหน่งการติดตั้งของคุณ
  • ตำแหน่ง AppData ของคุณ
  • ไฟล์ที่เลือกผ่านไฟล์หรือโฟลเดอร์ที่เลือก
  • สถานที่ที่ขอใน App Manifest ของคุณ

คุณสามารถอ่านรายละเอียดเพิ่มเติมได้ที่นี่ => https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions


1

ในกรณีของฉันปัญหาคือนอร์ตัน โปรแกรมภายในของฉันไม่มีลายเซ็นดิจิทัลที่ถูกต้องและเมื่อพยายามลบไฟล์มันจะให้ UnauthorizedAccessException

ป้อนคำอธิบายรูปภาพที่นี่

หากมีการแจ้งเตือนคุณสามารถจัดการได้จากที่นั่น ในกรณีของฉันมันไม่ได้แจ้งเตือนว่าฉันสังเกตเห็น ดังนั้นนี่คือวิธีที่จะป้องกันไม่ให้ Norton บล็อกโปรแกรม

  1. เปิด Norton
  2. คลิกที่ลูกศรลง
  3. คลิกประวัติ
  4. ค้นหากิจกรรมตามโปรแกรม
  5. คลิกตัวเลือกเพิ่มเติม
  6. คลิกยกเว้นกระบวนการ

0

ฉันก็ประสบปัญหาเดียวกันเมื่อพยายามทำเช่นนี้หลังจากการปรับใช้ที่เซิร์ฟเวอร์:

dirPath = Server.MapPath(".") + "\\website\\" + strUserName;
if (!Directory.Exists(dirPath))
{
    DirectoryInfo DI = Directory.CreateDirectory(dirPath);
}
string filePath = Server.MapPath(".") + "\\Website\\default.aspx";
File.Copy(filePath, dirPath + "\\default.aspx", true);
File.SetAttributes(dirPath + "\\default.aspx", FileAttributes.Normal);

ฉันได้รับอนุญาตใน IIS ให้กับกลุ่มอื่นรวมถึงผู้ดูแลระบบและปัญหาของฉันได้รับการแก้ไข


0

ฉันพบว่าข้อผิดพลาดนี้สามารถเกิดขึ้นได้ใน DESIGN MODE ซึ่งตรงข้ามกับ? โหมดการดำเนินการ ... หากคุณกำลังทำบางสิ่งบางอย่างเช่นการสร้างสมาชิกคลาสที่ต้องการการเข้าถึงไฟล์. INI หรือ. HTT (ไฟล์กำหนดค่าไฟล์ช่วยเหลือ) คุณอาจไม่ต้องการเริ่มต้นรายการในการประกาศ แต่เริ่มต้นได้ในภายหลัง ใน FORM_Load () ฯลฯ ... เมื่อคุณเริ่มต้น ... ใช้คำสั่ง guard IF:

    /// <summary>FORM: BasicApp - Load</summary>
    private void BasicApp_Load(object sender, EventArgs e)
    {
        // Setup Main Form Caption with App Name and Config Control Info
        if (!DesignMode)
        {
            m_Globals = new Globals();
            Text = TGG.GetApplicationConfigInfo();
        }
    }

สิ่งนี้จะป้องกันไม่ให้ MSVS Designer พยายามสร้างไฟล์ INI หรือ HTM เมื่อคุณอยู่ในโหมดออกแบบ


0

ฉันพบข้อผิดพลาดนี้เมื่อฉันพยายามเปลี่ยนชื่อโฟลเดอร์อย่างรวดเร็วหลังจากถูกย้ายหรือสร้างขึ้น

ง่าย ๆSystem.Threading.Thread.Sleep(500);แก้ไขมัน:

void RenameFile(string from, string to)
{
   try
   {   
      System.IO.File.Move(from, to)      
   }   
   catch 
   {  
       System.Threading.Thread.Sleep(500);      
       RenameFile(from, to);      
   }   
}

คิดว่ามันจะดีกว่าถ้าคุณตรวจสอบว่ามีโฟลเดอร์อยู่ก่อนที่จะย้ายมากกว่านอนประมาณครึ่งวินาที ... หากระบบปฏิบัติการไม่ว่างการย้ายครั้งก่อนอาจใช้เวลานานกว่าครึ่งวินาทีและกลับไปเป็นปัญหาเดียวกัน
Paul Zahra

รหัสชิ้นนี้อันตรายมาก มันทำซ้ำเมธอด RenameFile ไม่ว่าจะเกิดข้อยกเว้นอะไรขึ้น! มันอาจทำให้แอปขัดข้องถ้าสาเหตุของข้อยกเว้นเป็นปัญหาการอนุญาตที่แท้จริง
Hossein Shahdoost

0

ในกรณีเฉพาะของฉันฉันได้สร้างและลบ 10,000 โฟลเดอร์ซ้ำ ๆ ฉันดูเหมือนว่าปัญหาคือว่าแม้ว่าวิธีการDirectory.Delete(path, true)ส่งกลับวิธีกลไก underling อาจยังคงลบไฟล์จากดิสก์ และเมื่อฉันเริ่มสร้างโฟลเดอร์ใหม่ทันทีหลังจากลบโฟลเดอร์เก่าบางโฟลเดอร์ก็ยังคงถูกล็อคเนื่องจากยังไม่ถูกลบอย่างสมบูรณ์ และฉันได้รับ System.UnauthorizedAccessException: "การเข้าถึงพา ธ ถูกปฏิเสธ"

ป้อนคำอธิบายรูปภาพที่นี่

ใช้Thread.Sleep(5000)หลังจากDirectory.Delete(path, true)แก้ปัญหานั้นแล้ว ฉันยอมรับอย่างแน่นอนว่าสิ่งนี้ไม่ปลอดภัยและฉันไม่สนับสนุนให้ใครใช้งาน ฉันชอบที่นี่เป็นวิธีที่ดีกว่าในการแก้ปัญหานี้เพื่อปรับปรุงคำตอบของฉัน ตอนนี้ฉันแค่ให้ความคิดว่าทำไมข้อยกเว้นนี้อาจเกิดขึ้น

class Program
{
    private static int numFolders = 10000;
    private static string rootDirectory = "C:\\1";

    static void Main(string[] args)
    {
        if (Directory.Exists(rootDirectory))
        {
            Directory.Delete(rootDirectory, true);
            Thread.Sleep(5000);
        }

        Stopwatch sw = Stopwatch.StartNew();
        CreateFolder();
        long time = sw.ElapsedMilliseconds;

        Console.WriteLine(time);
        Console.ReadLine();
    }

    private static void CreateFolder()
    {
        var one = Directory.CreateDirectory(rootDirectory);

        for (int i = 1; i <= numFolders; i++)
        {
            one.CreateSubdirectory(i.ToString());
        }
    }
}

0

ก่อนอื่นให้ตรวจสอบพา ธ ถ้าตัวอักษรโคลอน (:) ไม่อยู่หลังตัวอักษรไดรฟ์ หากโคลอนไม่หายไปคุณสามารถตรวจสอบว่าได้รับอนุญาตการเข้าถึง / เขียนสำหรับพา ธ นั้นหรือไม่ ฉันมีปัญหาเดียวกันและฉันเพิ่งหายไปจากลำไส้ใหญ่ได้รับอนุญาตและทุกอย่างอื่นก็โอเค

C:\folderpath

จะทำงานได้ดี แต่

C\folderpath .........(missing colon)

จะทำให้คุณเข้าถึงข้อผิดพลาดการปฏิเสธ


0

ฉันพยายามใช้ System.IO.File.OpenWrite (เส้นทาง)

และมันใช้งานไม่ได้เพราะฉันเพิ่งผ่าน OpenWrite () พา ธ ไปยังไดเร็กตอรี่ แต่ก็ต้องใช้พา ธ ไปจนถึงไฟล์ที่คุณต้องการเขียน ดังนั้นเส้นทางแบบเต็มรวมถึงชื่อไฟล์นามสกุลในตอนท้ายจะต้องผ่านเข้าสู่ OpenWrite เพื่อหลีกเลี่ยง UnauthorizedAccessException


0

ฉันยังวิ่งเข้าไปในโพสต์นี้เป็นการจัดการกับปัญหาเดียวกัน ดูเหมือนว่าไฟล์กำลังถูกใช้งานและไม่สามารถเขียนลงไปได้ แม้ว่าจะไม่สามารถคิดออกได้ แต่กระบวนการใดที่ใช้งานอยู่ ลงชื่อออกจากผู้ใช้รายอื่นที่ลงชื่อเข้าใช้ในกล่องนั้นไม่เห็นผู้ใช้ที่ถือมันอยู่ เคล็ดลับสั้น ๆ เกี่ยวกับวิธีการค้นหาเดียวกัน

ขอบคุณ Lakshay (ผู้พัฒนา)


ในคำตอบของคุณอย่าโพสต์คำถามใหม่ แต่พยายามตอบคำถามของโปสเตอร์ต้นฉบับพร้อมข้อมูลที่เป็นประโยชน์ สำหรับคำถามของคุณเองกรุณาค้นหา stackoverflow ก่อนสำหรับคำถามเดียวกันหรือคล้ายกัน หากคุณไม่พบใด ๆ โพสต์คำถามใหม่ตามคู่มือนี้: วิธีการถามคำถามที่ดี
alev

0

เพื่อแก้ปัญหานี้ฉันทำตามวิธี Scot Hanselman ที่Debugging System.UnauthorizedAccessException (มักตามด้วย: การเข้าถึงพา ธ ถูกปฏิเสธ)บทความโค้ดที่มีตัวอย่างเป็นเสียงร้อง:

class Program
{
    static void Main(string[] args)
    {
        var path = "c:\\temp\\notfound.txt";
        try
        {
            File.Delete(path);
        }
        catch (UnauthorizedAccessException)
        {
            FileAttributes attributes = File.GetAttributes(path);
            if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
            {
                attributes &= ~FileAttributes.ReadOnly;
                File.SetAttributes(path, attributes);
                File.Delete(path);
            }
            else
            {
                throw;
            }
        }
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.