20-1 仵袘P|Bz

在 ASP 中,對於檔案與目錄的處理,主要是靠 FileSystemObject 物件,此物件提供對於檔案和目錄的建立、刪除、複製等功能。

首先,我們看看在處理檔案或目錄的路徑時, FileSystemObject 物件所提供的一些方法,請見下列範例:

Example(fileAccess/pathFunction01.asp):

在上述範例中,我們先用 physicalPath = Request.ServerVariables("PATH_TRANSLATED") 來取出範例檔案的實體路徑,然後再使用各種函數來取出此路徑的重要部分,此範例的原始碼如下:

原始檔(fileAccess/pathFunction01.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<% title="對於實體路徑的處理功能" %>
<!--#include file="../head.inc"-->
<hr>

<%
physicalPath=Request.ServerVariables("PATH_TRANSLATED");
fso = Server.CreateObject("Scripting.FileSystemObject");
methods = [
	"GetAbsolutePathName",
	"GetFileName",
	"GetBaseName",
	"GetExtensionName",
	"GetDriveName",
	"GetParentFolderName"];
%>
<h3 align=center>physicalPath = <%=physicalPath%></h3>
<table border=1 align=center>
<% for (i=0; i<methods.length; i++){%>
	<tr><td><%cmd="fso." + methods[i] + "(physicalPath)";%><%=cmd%><td>&nbsp;<font color=green><%=eval(cmd)%></font>
<%}%>
</table>

<hr>
<!--#include file="../foot.inc"-->

(本範例也有 VBScript 的版本,請見 fileAccess/pathFunction01_vbs.asp

Hint
名詞說明:
  • 實體路徑:本機作業系統所看到的路徑。
  • Web 路徑:網頁伺服器所看到的路徑。
一般而言,我們在 ASP 程式碼中所用的檔案名稱都是伺服器所看到的名稱,必須經由 Server.MapPath() 函數,才能轉到標準的完整路徑,此時才能對檔案進行各種處理。

上述範例是以實體路徑舉例,同樣的函數,也可以用在 Web 路徑,但是得到的結果大同小異,範例如下:

Example(fileAccess/pathFunction02.asp):

在上述範例中,我們先用 webPath = Request.ServerVariables("SCRIPT_NAME"); 來取出範例檔案的 Web 路徑,然後再使用各種函數來取出此路徑的重要部分,此範例的原始碼如下:

原始檔(fileAccess/pathFunction02.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<% title="對於 Web 路徑的處理功能" %>
<!--#include file="../head.inc"-->
<hr>

<%
webPath=Request.ServerVariables("SCRIPT_NAME");
fso = Server.CreateObject("Scripting.FileSystemObject");
methods = [
	"GetAbsolutePathName",
	"GetFileName",
	"GetBaseName",
	"GetExtensionName",
	"GetDriveName",
	"GetParentFolderName"];
%>
<h3 align=center>webPath = <%=webPath%></h3>
<table border=1 align=center>
<% for (i=0; i<methods.length; i++){%>
	<tr><td><%cmd="fso." + methods[i] + "(webPath)";%><%=cmd%><td>&nbsp;<font color=green><%=eval(cmd)%></font>
<%}%>
</table>

<hr>
<!--#include file="../foot.inc"-->

若要存取現有的磁碟機、檔案或資料夾,請使用 FileSystemObject 物件中相關的方法,如下:

這三個函式的輸入都是一個路徑,輸出則是相關的物件,我們就可以使用此物件來取得相關的性質或是呼叫相關的方法。

例如,我們可以使用 FileSystemObject 物件的 GetFile() 方法,抓出檔案物件,然後列舉此檔案物件的屬性。例如:

Example(fileAccess/fileProp01.asp):

此範例的原始碼如下:

原始檔(fileAccess/fileProp01.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<% title="列出檔案的屬性" %>
<!--#include file="../head.inc"-->
<hr>

<%
// Reference: http://www.ezineasp.net/post/Javascript-FSO-GetFile-Method.aspx
fso = Server.CreateObject("Scripting.FileSystemObject");
fullPath = Request.ServerVariables("PATH_TRANSLATED");
file = fso.GetFile(fullPath);
methods = [
	"Attributes",
	"DateCreated",
	"DateLastAccessed",
	"DateLastModified",
	"Drive",
	"Name",
	"ParentFolder",
	"Path",
	"ShortName",
	"ShortPath",
	"Size",
	"Type"];
%>
<h3 align=center>file = <%=file%></h3>
<table border=1 align=center>
<% for (i=0; i<methods.length; i++){
	cmd = "file." + methods[i]; %>
	<tr><td><%=cmd%><td>&nbsp;<font color=green><%=eval(cmd)%></font>
<%}%>
</table>

<hr>
<!--#include file="../foot.inc"-->

若要創造一個檔案並進行讀寫,可以使用 FileSystemObject 物件的 OpenTextFile() 方法,請見下列範例:

Example(fileAccess/openTextFile01.asp):

此範例的原始碼如下:

原始檔(fileAccess/openTextFile01.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<% title="開啟檔案進行讀寫" %>
<!--#include file="../head.inc"-->
<hr>

<%
fileName = "test.txt";
// 轉成實體絕對路徑
absPath=Server.MapPath(fileName);
Response.Write("absPath="+absPath);
fso = new ActiveXObject("Scripting.FileSystemObject");
// 寫入檔案:2 代表寫入,true 代表若檔案不存在,則自動產生新檔案
fid = fso.OpenTextFile(absPath, 2, true);
string = "這是一個測試!";
fid.WriteLine(string);
fid.Close();
Response.Write("<p>已經產生檔案「" + fileName + "」並寫入文字「" + string + "」!");
// 讀出檔案:1 代表唯讀
fid = fso.OpenTextFile(absPath, 1);
output = fid.ReadAll();
fid.Close();
Response.Write("<p>讀出的內容是:「" + output + "」");
%>

<hr>
<!--#include file="../foot.inc"-->

所產生的檔案內容如下:

原始檔(fileAccess/test.txt):(灰色區域按兩下即可拷貝)
這是一個測試!

若要檢查硬碟空間,可見此範例:

Example(fileAccess/diskSpace01.asp):

此範例的原始碼如下:

原始檔(fileAccess/diskSpace01.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<% title="檢查硬碟所剩空間" %>
<!--#include file="../head.inc"-->
<hr>

<%
function showFreeSpace(drivePath){
	var fso, d, out;
	fso = new ActiveXObject("Scripting.FileSystemObject");
	d = fso.GetDrive(fso.GetDriveName(drivePath));
	out = d.VolumeName + " (" + drivePath + ") ";
	out = out + " ===> Free Space: " + d.FreeSpace/1024/1024 + " MB<br>";
	return(out);
}
%>

<%Response.write(showFreeSpace("c:"))%>
<%Response.write(showFreeSpace("d:"))%>

<hr>
<!--#include file="../foot.inc"-->


JScript 程式設計與應用:用於伺服器端的 ASP 環境