運用class物件讓ASP的FSO簡化


Tek 發表



運用class物件讓ASP的FSO簡化

運用class物件讓ASP的FSO簡化

FSO,也就是File System Object,跟Visual Basic Script用的是一樣的物件;相對的寫法也就類似• 不過
對一般剛學的人而言,利用FSO寫一個建立txt物件的程式還真是挺不方便的...尤其是寫一個還擁有偵錯、
還會把錯誤報告到事件記錄簿中的ASP程式• Tek在這邊就寫一個ASP所建立的Class物件,讓建立一個txt檔
的寫法簡化些•

:: 請將以下的程式碼複製,貼在一般記事本上,並把檔案改成: fsocomponent.asp

<!-----ASP CreateTextFile component---->
<SCRIPT LANGUAGE="VBSCRIPT" RUNAT="SERVER">
'''''''''''''''''''''''''''''
'Coded by Tek
'cx@ms74.url.com.tw
''''''''''''''''''''''''''''
Class addtxtfile
Private fp
Private ow
Private uni
Private con
Private Sub class_initialize()
fp = ""
ow = TRUE
uni = FALSE
con = ""
End Sub
Private Sub class_terminate()
Set fp = Nothing
Set ow = Nothing
Set uni = Nothing
Set con = Nothing
End Sub
Public Property Get filepath()
filepath = fp
End Property
Public Property Let filepath(pathvalue)
fp = pathvalue
End Property
Public Property Get overwrite()
overwrite = ow
End Property
Public Property Let overwrite(owboolean)
ow = owboolean
End Property
Public Property Get unicode()
unicode = uni
End Property
Public Property Let unicode(uniboolean)
uni = uniboolean
End Property
Public Property Get content()
content = con
End Property
Public Property Let content(convalue)
con = convalue
End Property
Public Sub txtadd()
on error resume next
Dim mycomfso, fileaddition
Set mycomfso = Server.CreateObject("SCRIPTING.FILESYSTEMOBJECT")
Set fileaddition = mycomfso.CreateTextFile(trim(lcase(filepath)),overwrite,unicode)
If err.Number <> 0 Then
Dim userip(2)
Dim erreventlog
userip(0) = request.ServerVariables("REMOTE_HOST")
userip(1) = request.ServerVariables("HTTP_X_FORWARDED_FOR")
userip(2) = ""
If userip(1) = "" Then
userip(2) = userip(0)
else
userip(2) = userip(1)
End If
Set erreventlog = server.createobject("wscript.shell")
erreventlog.LogEvent 1,"ASP FSO 物件設定錯誤:"&vbcrlf &"執行者IP: "&userip(2)&vbcrlf&"說明:"&err.source&" "&err.description
Set erreventlog = Nothing
With Response
.Write("<h5>ASP FSO Class執行/設定錯誤,請至事件記錄簿的『應用程式記錄檔』穫得詳細資料•")
.Write("<br>在要求查詢前,建議您利用以下資訊查詢:<Br><br>")
.Write("• 執行者IP:" & userip(2) & "<br>")
.Write("• 發生日期:" & date() & "<br>")
.Write("• 發生時間" & time())
.Write("</h5>")
End With
Set userip = Nothing
Response.End
End If
fileaddition.WriteLine(trim(content))
fileaddition.Close
Set fileaddition = Nothing
Set mycomfso = Nothing
End Sub
End Class
</SCRIPT>

【介紹這一個class物件】
它只做了FSO的一部份,也就是建立一個文字檔案的部份• 包括了一般FSO建立文字檔的所有功能• 如果在
使用這一個Cleass元件設定錯誤的話,以Win NT/2k的話,這一個程式將會自動把記錄放到事件記錄簿中•
如果是Win 9x/Me則會在Windows目錄中建立一個wsh.log記錄檔•

class名稱:
addtxtfile

class功能:
註:obj為您的物件名稱
obj.filepath = "" '設定檔案路逕
obj.content = "" '撰寫檔案內容
obj.overwrite = TRUE/FALSE '以布林值設定如果檔案重覆時是否蓋檔
obj.unicode = TRUE/FALSE '以布林值設定是否為unicode格式

預設的設定:
檔案路逕:空字串
檔案內容:空字串
覆蓋檔案:TRUE(是)
Unicode:FALSE(否)

【通常會看到的設定錯誤】

•建立檔案時,該檔案已經存在的"不準"複蓋的錯誤
記錄說明:Microsoft VBScript runtime error File already exists

•無效的設定(例如沒有給予檔案位置則會發生此錯誤)
記錄說明:Microsoft VBScript runtime error Invalid procedure call or argument

•指定的磁碟槽未就緒(例如A:\還沒插入磁片則會發生此錯誤)
記錄說明:Microsoft VBScript runtime error Disk not ready

如果您還有無法辨認的錯誤說明,請麻煩發表該問題供其他人討論•謝謝!

【如何使用此class物件】

在使用前,請先以SSI語法將有這一個class物件的網頁插入:
<!--#include file="fsocomponent.asp"-->
接著在您要使用這一個class物件的網頁上開始設定...
其實有學過VBScript人都會知道,Set為"將物件引用指定至變數或屬性,或是建立程序引用與事件的關連。"
所使用... 要用這一個class物件時,在這邊要另外加一個new用來建立一物件類別之新執行個體的關鍵字•
例如:
Dim obj
Set obj = New addtxtfile
其中addtxtfile是這一個class的名稱,不可更改! 建立這一個object,剩下的就只要設定功能就完成了•
在這邊直接列出完整範例:

<!--#include file="fsocomponent.asp"-->
<%
'coded by tek
Dim FSOobj
Set FSOobj = New addtxtfile
FSOobj.filepath = "C:\french.txt" '檔案路逕
FSOobj.content = "comment, ca va?" '檔案內容
FSOobj.overwrite = TRUE
FSOobj.txtadd
Response.Write("工作完成")
Set FSOobj = Nothing '釋放空間
%>

在這邊,
FSOobj.filepath = "C:\french.txt" '檔案路逕
FSOobj.content = "comment, ca va?" '檔案內容
FSOobj.overwrite = TRUE
這三個是設定這一個class的功能, obj.filepath 為設定檔案路逕位置, obj.content為撰寫該檔案之
內容,obj.overwrite 則必須給布林值,也就是true或false•如果設定為true則會蓋檔、flase為否•
另外在這裡還有unicode檔案(格式)建立(obj.unicode),也是布林值• 如果True為是、False為否•


最後...
創作這一個class是想讓沒試過的人,或者是不會用(嫌createtextfile太難的人)所做的...
Tek在這邊只是把這一個class寫了一個基本的樣子,如果有人喜歡的話,Tek可以下次"稍微"強化這一個
class的能力• 如果您對這一個class有意見的話,煩請多指教! 謝謝!

最後更新日期: 9/17/2002 9:29:15 AM