【问题标题】:System.IO.WriteAllBytes - Access to path denied errorSystem.IO.WriteAllBytes - 访问路径被拒绝错误
【发布时间】:2012-04-27 12:17:06
【问题描述】:

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

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

我尝试传入文字路径 Environment.SpecialFolder.ApplicationData、Path.GetTempPath(),但都向我提供了相同的错误。

我检查了这些文件夹的权限,还尝试以管理员模式启动程序,但没有成功。

【问题讨论】:

  • 你能发布你的代码吗?

标签: c# winforms


【解决方案1】:

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 此错误并非 c: 独有,我在 Windows 10 上的所有驱动器上都遇到过此错误。
    【解决方案3】:

    您确定文件还没有被锁定吗?如果您打算从文件中读取 + 写入字节,您可能需要考虑使用 Stream 类(例如 FileStream),其优点是您将锁定文件并且没有其他应用程序可以访问该文件同时。

    来自this topic的代码示例:

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

    【讨论】:

    • 锁定的文件会产生完全不同的异常。
    • 你是对的,如果文件被锁定,它会给出 System.IO.IOException。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多