2012-04-27 371 views
6

目前2010的.NET 4在Windows 7System.IO.WriteAllBytes - 訪問路徑被拒絕錯誤

開發在Visual Studio C#WinForms應用程序首先,我使用的文件的文件讀取的字節流。 ReadAllBytes()方法。然後,當試圖寫回文件時,我在使用WriteAllBytes方法時遇到了路徑拒絕錯誤。

我試過在文字路徑中傳遞Environment.SpecialFolder.ApplicationData,Path.GetTempPath(),但都提供給我相同的錯誤。

我已經檢查了這些文件夾的權限,並且還試圖在沒有運氣的情況下以管理員模式啓動程序。

+2

你可以發佈你的代碼嗎? – 2012-04-27 12:19:44

回答

1

您確定該文件尚未鎖定嗎?如果您打算從文件讀取+寫入字節,則可能需要考慮使用Stream類(例如FileStream),優點是您將鎖定文件並且其他應用程序無法在此期間訪問文件。從this topic

代碼示例:

FileStream fileStream = new FileStream(
    @"c:\words.txt", FileMode.OpenOrCreate, 
    FileAccess.ReadWrite, FileShare.None); 
+0

鎖定的文件會產生完全不同的異常。 – 2012-04-27 12:38:23

+0

你是對的,如果文件被鎖定,它會給出一個System.IO.IOException。 – Styxxy 2012-04-27 13:04:41

1

在Windows7也有基於C的安全問題:。如果您將路徑修改爲D:則不存在拒絕訪問問題。

請嘗試使用Path.GetTempPath()示例代碼,它將成功執行。

static void Main(string[] args) 
    { 
     string path = Path.GetTempPath(); 
     byte[] binaryData; 
     string text = "romil123456"; 
     using (MemoryStream memStream = new MemoryStream(Encoding.ASCII.GetBytes(text))) 
      { 
       binaryData = memStream.ToArray(); 
      } 
      System.IO.File.WriteAllBytes(@path + "\\words123.txt" , binaryData); 
     } 
    } 

Environment.SpecialFolder.ApplicationData提供文件夾名稱,不提供該文件夾的完整路徑。所以當你在定義寫入文件的路徑中使用這個文件時,這個文件夾將在本地應用程序路徑下被搜索到。

+0

這個錯誤不是c:專有的,iv在Windows 10上的所有驅動器上都經歷過它。 – ShadowKras 2017-11-10 15:35:04

1

確保在使用File.WriteAllBytes()(包括文件名)時指定整個路徑。

File.WriteAllBytes()無法寫入通用目錄,它必須寫入特定文件。

希望這會有所幫助。