写文件时有些奇怪

时间:2012-10-12 19:07:56

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

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

 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.

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

5 个答案:

答案 0 :(得分:1)

为什么要尝试更改Environment.CurrentDirectory?如果您希望它可能在不同的实例中发生变化,那么您只想引用它。如果你只想从预定义的路径读/写,为什么不调用

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

答案 1 :(得分:1)

我认为问题是

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

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

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

答案 2 :(得分:0)

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

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

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

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

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

答案 3 :(得分:0)

您的程序可以访问Windows安装目录下的文件夹,这是一个非常糟糕的主意。实际上,如果您的程序未作为Administrators组的成员运行,则默认情况下它将无法访问。默认情况下(并且有充分理由),ASP.Net程序以最小的权限运行。

答案 4 :(得分:0)

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