【问题标题】:Something weird with writing file写文件有些奇怪
【发布时间】:2012-10-12 19:07:56
【问题描述】:

所以,这是一个问题: 我有几个文本框,我需要对它们进行序列化。 我就是这样做的:

 protected void Button1_Click1(object sender, EventArgs e)
    {   
        Environment.CurrentDirectory = "d:/DZHosts/LocalUser/YoYoZ/LOL/Reports";

        string[] s = new string[4];
        FileStream fs = new FileStream(Environment.CurrentDirectory + "Report #" + i + ".rep", FileMode.OpenOrCreate, FileAccess.ReadWrite);
        BinaryFormatter bf = new BinaryFormatter();
        s[0] = TextBox1.Text;
        s[1] = TextBox2.Text;
        s[2] = TextBox3.Text;
        s[3] = TextBox4.Text;
        bf.Serialize(fs, s);
        fs.Close();
        i++;
        Label1.ForeColor = Color.Green;
        Label1.Text = "Complete!";
        System.Threading.Thread.Sleep(3000);
        Response.Redirect("http://LOL/Default.aspx");
    }

但是当我按下写它说:

Access to the path 'C:\Windows\SysWOW64\inetsrv\Report #0.rep' is denied.

为什么不尝试写入正确的目录?

【问题讨论】:

  • 这段代码是否从 IIS 运行?
  • 在任何情况下都使用 \\ 而不是 /

标签: c# asp.net .net io remote-server


【解决方案1】:

您为什么要更改 Environment.CurrentDirectory?如果您希望它可能会在不同的情况下发生变化,您只想参考它。如果您只想从预定义的路径读取/写入,为什么不调用

FileStream fs = new FileStream("d:/DZHosts/LocalUser/YoYoZ/LOL/Reports/Report #" + i + ".rep", FileMode.OpenOrCreate, FileAccess.ReadWrite);

?

【讨论】:

    【解决方案2】:

    我认为问题是

    Environment.CurrentDirectory = "d:/DZHosts/LocalUser/YoYoZ/LOL/Reports";
    

    未按预期工作。试试这个

    Directory.SetCurrentDirectory(@"C:\Temp"); 
    string whereami = Environment.CurrentDirectory; 
    

    【讨论】:

    • 如果这是一个在 IIS 中具有默认安全性的 ASP.NET 网站,则保证无法访问站点根目录之外的任何文件夹。使用/ 作为路径分隔符没有任何问题——你可以试试。发帖者的问题不在于路径是怎么写的(假设它存在)。
    【解决方案3】:

    如果您的程序有权访问 Windows 安装目录下的文件夹,那将是一个非常糟糕的主意。事实上,如果您的程序没有作为管理员组的成员运行,则默认情况下它没有访问权限。同样默认情况下(并且有充分的理由),ASP.Net 程序以最低权限集运行。

    【讨论】:

      【解决方案4】:

      您的网站(它是应用程序池)在 IUSR 帐户下运行,该帐户只能访问网站的根文件夹,除此之外没有任何权限。如果您需要访问站点根目录之外的其他文件夹,则需要将 IUSR 帐户添加到这些文件夹中。

      一般来说,访问系统文件夹是个坏主意,因为它为潜在的攻击者提供了一种访问和可能修改系统文件的方法 - 如果您的服务器被黑客入侵。

      您最好使用站点根文件夹中的本地文件夹来存储报告输出。这样,您站点的所有文件都将位于一个根文件夹下,您不必担心管理磁盘上的其他文件夹。如果您需要使用共享主机(您不控制服务器),这也是您唯一的选择 - 在共享主机服务上,站点可能无法访问其根文件夹之外的任何内容。

      要获取站点根文件夹的物理路径,请使用:

      string sPath = Server.MapPath("/");
      

      【讨论】:

      • 我正在使用的那条路径,我的主机给了我。但是 ASP.net 没有使用它,
      【解决方案5】:

      所以,问题是我试图上传原始网站,没有正确打包。我在项目菜单中使用了包选项,然后完整的站点在 obj\Release\Package 中。感谢所有试图提供帮助的人!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-27
        • 2016-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-30
        • 2020-03-26
        相关资源
        最近更新 更多