2012-10-12 74 views
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. 

爲什麼不嘗試寫入正確的目錄?

+0

這段代碼從IIS中運行? – Rob4md

+0

在任何情況下,使用\\而不是/ –

回答

0

您的網站(它的應用程序池)是一種只能訪問該網站的根文件夾,沒有任何外界的IUSR帳戶下運行。如果您需要訪問站點根目錄之外的其他文件夾,則需要將IUSR帳戶添加到這些文件夾。

在一般情況下,這是一個壞主意來訪問系統文件夾,但是,因爲它提供了一個潛在的攻擊者的方式來訪問並可能修改系統文件 - 如果你的服務器被黑客攻擊。

你會更好使用你的網站的根文件夾內的一個本地文件夾來存儲報表輸出。這樣,您網站的所有文件都將位於單個根文件夾下,您不必擔心管理磁盤上的其他文件夾。如果您需要使用共享主機(您不控制服務器),這也是您唯一的選擇 - 在共享主機服務上,網站可能無法訪問其根目錄文件夾之外的任何內容。

爲了讓您的網站的根文件夾的物理路徑,使用方法:

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

我正在使用的路徑,我的託管給了我。但ASP.net不能使用它, – YoYoZ

0

這將是一個非常糟糕的主意,你的程序有Windows下訪問文件夾的安裝目錄。事實上,如果您的程序不是作爲管理員組的成員運行,則默認情況下它將無法訪問。再次默認情況下(並且出於很好的原因),ASP.Net程序以最少的權限運行。

1

爲什麼你想改變Environment.CurrentDirectory?如果您希望在不同的實例中可能會發生更改,則只需引用該參數。如果您只想從預定義的路徑讀取/寫入,爲什麼不調用

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

+0

我也在嘗試這個版本,它沒有工作。 – YoYoZ

1

我相信問題是

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

,你想到的是不工作。試試這個

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

如果這是一個在IIS中具有默認安全性的ASP.NET網站,它保證不能訪問站點根目錄之外的任何文件夾。使用'/'作爲路徑分隔符沒有什麼問題 - 你可以試試。海報的問題不在於如何書寫路徑(假設它存在)。 – xxbbcc

0

所以,問題是,我試圖上傳原始網站,沒有正確打包。我在「項目」菜單中使用了包選項,然後完成站點位於obj \ Release \ Package中。感謝所有試圖幫助的人!