บทความนี้เกิดจากการที่ผมได้รับงาน
ที่ต้องมีการทำงานที่เกี่ยวข้องกับ Folder และ File
โดยจะต้อง List รายชื่อของ Folder และ File ต่างๆที่อยู่ทางฝั่งของเครื่อง
Server เพื่อให้ ผู้ใช้สามารถทำการลบ หรือ สร้าง Folder และ File บนเครื่อง Server แต่สำหรับบทความนี้ จะเป็นแค่แสดง Folder และ File เท่านั้นนะครับ
ผมมีวิธีการสร้างโปรแกรมโดยใช้ FileSystemObject
ซึ่งเป็น Object ที่มีอยู่บนเซิร์ฟเวอร์
(ซึ่งมีให้ใน PWS และ IIS ) ซึ่งโค้ดทั้งหมดมีดังนี้ครับ
<%
Function ShowImageForType(strName)
Dim strTemp
strTemp = strName
If strTemp <> "dir"
Then
strTemp = LCase(Right(strTemp, Len(strTemp) - InStrRev(strTemp, ".",
-1, 1)))
End If
Select
Case strTemp
Case "asp"
strTemp = "asp"
Case "dir"
strTemp = "dir"
Case "htm",
"html"
strTemp = "htm"
Case "gif",
"jpg"
strTemp = "img"
Case "txt"
strTemp = "txt"
Case Else
strTemp = "misc"
End Select
strTemp = "<IMG
SRC=""./images/dir_" & strTemp &
".gif"" WIDTH=16 HEIGHT=16 BORDER=0>"
ShowImageForType = strTemp
End Function
%>
<%
Dim strPath
Dim objFSO
Dim objFolder
Dim objItem
strPath = "./"
Set
objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Server.MapPath(strPath))
%>
Contents of <B><%=
strPath %></B><BR>
<BR>
</p>
<TABLE BORDER="5" BORDERCOLOR="#003399"
CELLSPACING="0" CELLPADDING="2">
<TR BGCOLOR="#0066CC">
<TD><FONT
COLOR="#FFFFFF"><B>File Name:</B></FONT></TD>
<TD><FONT
COLOR="#FFFFFF"><B>File Size (bytes):</B></FONT></TD>
<TD><FONT
COLOR="#FFFFFF"><B>Date Created:</B></FONT></TD>
<TD><FONT
COLOR="#FFFFFF"><B>File Type:</B></FONT></TD>
</TR>
<%
For
Each objItem In
objFolder.SubFolders
If InStr(1,
objItem, "_vti", 1) = 0 Then
%>
<TR BGCOLOR="#91C8FF">
<TD ALIGN="left" ><%=
ShowImageForType("dir") %> <A
HREF="<%= strPath &
objItem.Name %>"><%=
objItem.Name %></A></TD>
<TD ALIGN="right"><%=
objItem.Size %></TD>
<TD ALIGN="left" ><%=
objItem.DateCreated %></TD>
<TD ALIGN="left" ><%=
objItem.Type %></TD>
</TR>
<%
End If
Next
For Each
objItem In objFolder.Files
%>
<TR BGCOLOR="#91C8FF">
<TD ALIGN="left" ><%=
ShowImageForType(objItem.Name) %> <A
HREF="<%= strPath &
objItem.Name %>"><%=
objItem.Name %></A></TD>
<TD ALIGN="right"><%=
objItem.Size %></TD>
<TD ALIGN="left" ><%=
objItem.DateCreated %></TD>
<TD ALIGN="left" ><%=
objItem.Type %></TD>
</TR>
<%
Next
Set
objItem = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
%>
</TABLE>
|
ตัวอย่างการ Run โปรแกรม
อธิบายโปรแกรม
จากโค้ด จะเห็นได้ว่ามี function ที่ชื่อ
ShowImageForType(strName) ซึ่งเป็น function ที่ใช้ในการ
return ค่าของ รูป icon ของ Folder และชนิดของไฟล์ต่างๆ ซึ่งได้แก่ asp,
htm(แทนไฟล์ htm และ html), img(แทนไฟล์ gif และ jpg), txt(แทน Text ไฟล์)
และ misc(แทนไฟล์ อื่นๆ)
โดยมีวิธีการคือ เมื่อเราได้ทำการเรียก
function ShowImageForType และ ส่งอาร์กิวเมนต์ strName ซึ่งเป็นชื่อของไฟล์ใดๆ
แต่ถ้าเป็น Folder เราจะส่ง "dir" มาแทน จากนั้น เราจะทำการตรวจสอบนามสกุลว่าเป็นไฟล์ชนิดใด
แล้วทำการ return ชื่อของรูป ที่ตรงกับไฟล์ๆนั้น
ส่วนโค้ดหลักของโปรแกรมจะเป็นการสร้าง
File System Object เพื่อติดต่อกับระบบไฟล์ โดยมีรูปแบบคือ
Set
objFSO = Server.CreateObject("Scripting.FileSystemObject")
และเมื่อเราได้สร้าง File System Object
แล้ว ต่อไปเราจะทำการสร้าง Folder Object
Set
objFolder = objFSO.GetFolder(Server.MapPath(strPath))
โดย strPath คือ Path ของ Folder ที่เราต้องการ
เมื่อเราได้สร้าง Folder Object เสร็จสิ้นแล้ว
ต่อไปเราก็จะใช้คำสั่ง For each เพื่อวนลูป แสดงรายชื่อของ Sub Folder ที่มีครับ
ส่วนของการแสดงรายชื่อของไฟล์จะทำโดยใช้คำสั่ง For each เพื่อวนลูป แสดงรายชื่อของ
File ที่มีใน Folder Object เช่นกัน
ปิดท้าย
จากโค้ดมีคำสั่ง If
InStr(1, objItem, "_vti",
1) = 0 Then ซึ่งใช้ในการตรวจสอบว่าเป็น Forder ของระบบเว็บเซิร์ฟเวอร์ หรือไม่
(ตรวจสอบว่า ภายในตัวแปร objItem มีข้อความ "_vti" อยู่หรือไม่
) หากว่าเป็นของระบบ จะไม่ทำการแสดงชื่อของ Folder นั้นออกมา
จะเห็นได้ว่าเมื่อเราได้สร้าง Folder
Object ขึ้นมาแล้วนั้น เราจะเรียกใช้ Property ต่างๆ เช่น Size, DateCreated
และ Type รวมทั้ง เราสามารถเรียกใช้ Mothodeในการจัดการไฟล์ เช่น Copy, Delete
,Move ด้วยเช่นกัน
หมายเหตุ
: หากเครื่องของคุณได้ทำการลงโปรแกรมป้องกันไวรัสเช่น
Norton Antivirus โปรแกรมป้อนไวรัสจะมีการแจ้ง เตือนการ Run Script ที่อันตราย(ที่เป็นอย่างนี้เพราะ
Script นี้มีการติดต่อกับ file กับเครื่อง ครับ ) ซึ่งเราสามารถที่จะเลือกว่าจะให้
Run ได้หรือไม่
ผมคิดว่าคุณคงจะสามารถประยุกต์ใช้งานอื่นๆกันได้แน่ๆครับ
แล้วพบกันใหม่ :-P |