System.IO.WriteAllBytes - 访问路径拒绝错误

时间:2012-04-27 12:17:07

标签: c# winforms

目前正在Windows 7上的Visual Studio 2010 .NET 4中开发C#WinForms应用程序。

首先,我使用File.ReadAllBytes()方法从文件中读取字节流。然后在尝试写回文件时,我在使用WriteAllBytes方法时获得了路径拒绝错误的访问权。

我已尝试传入文字路径,Environment.SpecialFolder.ApplicationData,Path.GetTempPath(),但所有这些都为我提供了相同的错误。

我已检查过这些文件夹的权限,并尝试以管理员模式启动程序,但没有运气。

3 个答案:

答案 0 :(得分:3)

在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提供文件夹名称,不提供该文件夹的完整路径。因此,当您在定义为写入文件的路径中使用此文件时,将在本地应用程序路径下搜索此文件夹。

答案 1 :(得分:3)

确保在使用包含文件名的File.WriteAllBytes()时指定整个路径。

File.WriteAllBytes()无法写入通用目录,它必须写入特定文件。

希望这有帮助。

答案 2 :(得分:2)

您确定文件仍未锁定吗?如果您计划从文件读取+写入字节,您可能需要考虑使用Stream类(例如FileStream),优点是您将锁定该文件并且没有其他应用程序可以访问在此期间提交文件。

来自this topic的代码示例:

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