在.net中創(chuàng)建目錄,大多數(shù)人使用的是Directory.CreateDirectory這個控件,然后,很多人就會發(fā)現(xiàn),一般在本機(jī)調(diào)試時可以正常運(yùn)行,但使用虛擬主機(jī)時,就不可以用了,為什么呢?
原因如下:
1、Directory控件的運(yùn)行原理是從根目錄開始請求,也就是說,假如您想在E:\web\log下面再創(chuàng)建一個目錄,使用Directory控件時,Directory會自動從E盤的根目錄開始請求,檢測是否存在;
2、為什么本機(jī)調(diào)試時可以使用呢?因?yàn)榇蟛糠殖绦騿T,對于本機(jī)的系統(tǒng)安全并沒有做特別的設(shè)置,所以默認(rèn)情況下,程序執(zhí)行時對本機(jī)所有的目錄及分區(qū)都有訪問的權(quán)限,所以在Directory請求時不會報(bào)錯;
3、為什么在虛擬主機(jī)上使用時會報(bào)錯,不能執(zhí)行呢?虛擬主機(jī),是在一臺服務(wù)器上創(chuàng)建多個用戶的站點(diǎn),為了安全,虛擬主機(jī)開放的權(quán)限只限于用戶目錄下面的權(quán)限,并沒有上級目錄及根目錄的權(quán)限,所以Directory請求根目錄的權(quán)限時,就會報(bào)錯,沒有權(quán)限。(注意:如果您使用的虛擬主機(jī)有Directory請求根目錄的權(quán)限,那么您選用的虛擬主機(jī)服務(wù)商就太不專業(yè)了,基本的安全權(quán)限都沒有配好,您的網(wǎng)站內(nèi)容將無任何安全可言,您網(wǎng)站中的數(shù)據(jù)將會被任一個用戶能請求到,能夠看到、下載到。
如果解決這個問題呢?
1、因?yàn)橹灰_配制了安全權(quán)限的虛擬主機(jī),都不能使用Directory控件來創(chuàng)建目錄,如何解決這個問題呢?這就需要我們想一個變通的辦法。
2、我們都知道,ASP中有一個FSO的控制功能,而且被大量使用,基本上99%以上的虛擬主機(jī)服務(wù)商會給用戶開放這個權(quán)限,所以我們就可以調(diào)用ASP中的FSO控件來完成目錄的相關(guān)操作。
實(shí)現(xiàn)方法
可以使用 Object Browser(對象瀏覽器)來查看 FSO 模型的對象、集合、屬性、方法、事件和常數(shù)。要在 Object Browser(對象瀏覽器)中查看 FSO,必須首先向 Microsoft 腳本運(yùn)行時類型庫添加一個引用。
向 Microsoft 腳本運(yùn)行時類型庫添加引用
在 Project(項(xiàng)目)菜單上,單擊 Add Reference(添加引用)。
在 COM 選項(xiàng)卡上,選擇 Microsoft Scripting Runtime(Microsoft 腳本運(yùn)行時),單擊 Select(選擇),然后單擊 OK(確定)。 現(xiàn)在,F(xiàn)SO 將顯示在 Object Browser(對象瀏覽器)中的 Interop.Scripting 節(jié)點(diǎn)內(nèi)。
使用 FileSystemObject 進(jìn)行編程:
使用 CreateObject 方法創(chuàng)建一個 FileSystemObject 對象。
將一個變量定義為 FileSystemObject 對象。例如:
Dim MyFileStream as Scripting.New FileSystemObject。
對新創(chuàng)建的對象使用相應(yīng)的方法。
訪問對象的屬性。
代碼示例
以下示例使用 FileSystemObject 對象的實(shí)例來讀取文件并寫入文件內(nèi)容。
Public Class UsesScripting Public Shared Sub Main() Dim fileSystem As New Scripting.FileSystemObject() Dim file As Scripting.TextStream file = fileSystem.OpenTextFile("E: est.txt", _ Scripting.IOMode.ForReading, False,_ Scripting.Tristate.TristateUseDefault) Dim contents As String = file.ReadAll() Console.WriteLine(contents) file.Close() End Sub
End Class
|