2

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

 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.

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

4

5 回答 5

1

我相信问题是

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

没有按预期工作。尝试这个

Directory.SetCurrentDirectory(@"C:\Temp"); 
string whereami = Environment.CurrentDirectory; 
于 2012-10-12T20:25:22.227 回答
1

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

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

?

于 2012-10-12T19:12:12.077 回答
0

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

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

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

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

string sPath = Server.MapPath("/");
于 2012-10-12T19:10:37.647 回答
0

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

于 2012-10-12T19:11:02.417 回答
0

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

于 2012-10-13T13:37:35.760 回答