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