2012-04-27 435 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()无法写入通用目录,它必须写入特定文件。

希望这会有所帮助。