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を変更しようとしているのですか?異なるインスタンスで変更される可能性があると予想される場合にのみ、それを参照する必要があります。事前定義されたパスから読み取り/書き込みをしたいだけなら、電話してみませんか

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

于 2012-10-12T19:12:12.077 に答える
1

問題は

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

期待どおりに機能していません。これを試して

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

あなたのウェブサイト(それはアプリプールです)は、サイトのルートフォルダにのみアクセスできるIUSRアカウントで実行されており、それ以外には何もアクセスできません。サイトのルート外の他のフォルダにアクセスする必要がある場合は、それらのフォルダにIUSRアカウントを追加する必要があります。

ただし、サーバーがハッキングされた場合、潜在的な攻撃者がシステムファイルにアクセスして変更する方法を提供するため、一般に、システムフォルダにアクセスすることはお勧めできません。

レポート出力を保存するには、サイトのルートフォルダー内のローカルフォルダーを使用することをお勧めします。このように、サイトのすべてのファイルが単一のルートフォルダーの下にあり、ディスク上の他のフォルダーの管理について心配する必要はありません。共有ホスティングを使用する必要がある場合(サーバーを制御しない場合)、これも唯一のオプションです。共有ホスティングサービスでは、サイトがルートフォルダーの外部にアクセスできない場合があります。

サイトのルートフォルダへの物理パスを取得するには、次を使用します。

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

プログラムがWindowsインストールディレクトリの下のフォルダにアクセスできるようにすることは非常に悪い考えです。実際、プログラムがAdministratorsグループのメンバーとして実行されていない場合、デフォルトではアクセスできません。この場合も、デフォルトで(そして正当な理由で)、ASP.Netプログラムは最小限の特権セットで実行されます。

于 2012-10-12T19:11:02.417 に答える
0

したがって、問題は、適切にパッケージ化されていない未加工のサイトをアップロードしようとしたことです。プロジェクト メニューのパッケージ オプションを使用すると、完全なサイトが obj\Release\Package にありました。助けてくれたみんなありがとう!

于 2012-10-13T13:37:35.760 に答える