簡體   English   中英

C# 訪問路徑被拒絕錯誤

[英]Access to the path denied error in C#

我讀過一篇類似的文章,但我無法弄清楚問題所在。

我已經更改了 windows 權限並更改了路由。

當我嘗試保存文件時,它拋出異常:

訪問路徑 **** 被拒絕。

string route="D:\\";
FileStream fs = new FileStream(route, FileMode.Create); <--here is the problem
        StreamWriter write = new StreamWriter(fs);
        patient person = new patient();
        patient.name = textBox1.Text;
        patient.name2 = textBox2.Text;

您正在嘗試為目錄(文件夾)創建 FileStream 對象。 指定一個文件名(例如@"D:\\test.txt"),錯誤就會消失。

順便說一下,我建議您使用將 Encoding 作為第二個參數的 StreamWriter 構造函數,否則在稍后嘗試讀取保存的文件時(使用 StreamReader),您可能會遇到令人不快的意外。

您是否嘗試指定一些文件名?

例如:

string route="D:\\somefilename.txt";

tl;dr 版本:確保您沒有嘗試在讀/寫模式下打開在文件系統中標記為只讀的文件。

我在嘗試讀取 XML 文件時遇到了這個錯誤。 我發現在某些情況下(如下詳述),即使路徑和文件名正確,也會為文件生成此錯誤。

文件詳情:

  • 路徑和文件名有效,文件存在
  • 服務帳戶和登錄用戶都具有對文件和完整路徑的完全控制權限
  • 該文件被標記為只讀
  • 它在 Windows Server 2008 R2 上運行
  • 文件路徑使用的是本地驅動器號,而不是 UNC 路徑

嘗試以編程方式讀取文件時,在運行完全相同的代碼時觀察到以下行為:

  • 以登錄用戶身份運行時,讀取文件沒有錯誤
  • 以服務帳戶身份運行時,嘗試讀取文件會生成“拒絕訪問”錯誤,但沒有詳細信息

為了解決這個問題,我不得不將方法調用從默認值(以 RW 方式打開)更改為以 RO 方式打開文件。 一旦我做了那個改變,它就停止拋出錯誤。

我遇到這個問題的時間比我想承認的要長。

我只需要以管理員身份運行 VS,我的菜鳥錯誤......

希望這有助於某人 <3

如果所有這些答案仍然存在問題,請嘗試將文件屬性更改為:

File.SetAttributes(yourfile, FileAttributes.Normal);

您無權訪問該文件。 請確定您是否可以訪問該驅動器中的文件。

string route= @"E:\Sample.text";
FileStream fs = new FileStream(route, FileMode.Create);

您必須提供要創建的文件名。 請試試這個,現在你可以創建了。

TLDR:就我而言,它與 AVAST 有關! =>將您的應用程序列入白名單


突然,我在寫的 windows WPF 程序中也遇到了這個UnauthorizedAccessException問題。 沒有一個解決方案有效 - 除了我無法弄清楚如何將我的應用程序提升到完全權限(不使用 VS)同時,已經在管理員帳戶上,我覺得沒有必要深入挖掘在權限問題上。

這些文件是圖像文件(jpg、psd、webp 等)我沒有嘗試打開/寫入目錄,它一直是文件的有效路徑,我需要寫入文件, FileAccess.ReadWrite不可避免的。 這些文件(以及它們的任何父目錄)都不是只讀的(我什至在通過FileInfo.IsReadOnly調用new FileStream(path, mode, access, share)之前通過代碼檢查過) - 那么突然發生了什么???

思考:我的驅動器崩潰了,所以我從另一個驅動器上解壓了我的解決方案代碼的備份。 同時,我在我的應用程序中添加了代碼到 PInvoke API 以直接讀取硬盤扇區物理字節以及 USB 插拔監控。

當我添加這些時,我開始得到異常,但即使我暫時從應用程序中刪除了相關代碼,我仍然得到 UnauthorizedAccessException

然后我想起很久以前做過的一件事,一個艱苦的類似問題,我希望我的應用程序通過 Wifi 傳遞敏感數據,這是在 AVAST 異常中添加可執行文件,以及程序集目錄(我的應用程序已經在通過防火牆授權的應用程序)

剛剛在 AVAST 設置中為我的應用程序做了這件事,異常消失了!!! 整整兩天我潛伏在 StackOverflow 和 web 繼續前進,終於!


詳細信息:我無法准確指出 AVAST 在我的應用程序中不喜歡的地方是我所做的唯一更改:

  1. 檢索然后啟動備份代碼 - 它工作得很好,文件(圖像)打開/寫入沒有問題(3 天前)
  2. 添加了 USB 檢測(3 天前 - 剛剛測試了代碼,沒有嘗試打開圖像)
  3. 添加了 PInvoke 物理驅動器直接讀取(2 天前 - FileStream,以及定義在哪里/如何掃描損壞的驅動器的邏輯 - 剛剛測試了代碼,沒有嘗試打開圖像)
  4. 添加Jpg/Jfif..開始的圖片格式檢測。2天前,測試代碼時出現異常
  5. 在搜索解決方案時,添加了一個圖片庫 WPF UserControl 以根據簽名顯示圖片並檢查哪些文件出現異常:幾乎所有文件(一些文件打開/寫入正常 - 為什么???)
  6. 嘗試了我在 SO 上找到的所有內容(自最近 2 天以來),直到我打開 AVAST 設置並將我的應用程序列入白名單
  7. ...現在我可以繼續添加一堆文件簽名來檢索盡可能多的數據。

如果這可以幫助那些像我一樣的人,他們不會在“我傳遞的是目錄路徑而不是文件路徑”上失敗,但是,沒有時間確切地了解為什么防病毒軟件認為我們自己的代碼是惡意軟件。

在 OSX 上使用下面的內容對我有用。

var path = "TempForTest";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM