ASP中FSO的使用方法

讓我們先來看看有什麼屬性與函數可用,後面會對部分函數做些小例子
ASP中FSO控件的方法或者屬性 描述
BuildPath()
生成一個文件路徑
CopyFile() 複製文件
CopyFolder() 複製目錄
CreateFolder() 創建新目錄
CreateTextFile() 生成一個文件
DeleteFile() 刪除一個文件
DeleteFolder() 刪除一個目錄
DriveExists() 檢驗盤符是否存在
Drives 返回盤符的集合
FileExists() 檢驗文件是否存在
FolderExists 檢驗一個目錄是否存在
GetAbsolutePathName() 取得一個文件的絕對路徑
GetBaseName() 取得文件名
GetDrive() 取得盤符名
GetDriveName() 取得盤符名
GetExtensionName() 取得文件的後綴
GetFile() 生成文件對象
GetFileName() 取得文件名
GetFolder() 取得目錄對象
GetParentFolderName 取得文件或目錄的父目錄名
GetSpecialFolder() 取得特殊的目錄名
GetTempName() 生成一個臨時文件對象
MoveFile() 移動文件
MoveFolder() 移動目錄
OpenTextFile()
打開一個文件流

實例說明

BuildPath(路徑,文件名) //這個方法會對給定的路徑加上文件,並自動加上分界符
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
var newpath = fso.BuildPath("c://tmp", "51js.txt"); //生成 c:/tmp/51js.txt的路徑
alert(newpath);
-->
</SCRIPT>

CopyFile(源文件, 目標文件, 覆蓋) //複製源文件到目標文件,當覆蓋值爲true時,如果目標文件存在會把文件覆蓋
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
var newpath = fso.CopyFile("c://autoexec.bat", "d://autoexec.bak");
-->
</SCRIPT>

CopyFolder(對象目錄,目標目錄 ,覆蓋) //複製對象目錄到目標目錄,當覆蓋爲true時,如果目標目錄存在會把文件覆蓋
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFolder("c://WINDOWS//Desktop", "d://"); //把C盤的Desktop目錄複製到D盤的根目錄
-->
</SCRIPT>

CreateFolder(目錄名) //創建一個新的目錄
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
var newFolderName = fso.CreateFolder("c://51JS"); //在C盤上創建一個51JS的目錄
-->
</SCRIPT>

CreateTextFile(文件名, 覆蓋) //創建一個新的文件,如果此文件已經存在,你需要把覆蓋值定爲true
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
var newFileObject = fso.CreateTextFile("c://autoexec51JS.bat", true); //腳本將在C盤創建一個叫 autoexec51JS.bat的文件
-->
</SCRIPT>

DeleteFile(文件名, 只讀?) //刪除一個文件,如果文件的屬性是隻讀的話,你需要把只讀值設爲true
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject"); //爲了安全我先把要刪除的autoexec.bat備份到你的D盤
var newpath = fso.CopyFile("c://autoexec.bat", "d://autoexec.bat"); //把C盤的autoexec.bat文件刪除掉
fso.DeleteFile("c://autoexec.bat", true);
-->
</SCRIPT>

DeleteFolder(文件名, 只讀?)//刪除一個目錄,如果目錄的屬性是隻讀的話,你需要把只讀值設爲true
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFolder("c://WINDOWS//Desktop", "d://"); //爲了安全我先把你C盤的Desktop目錄複製到你D盤的根目錄
fso.DeleteFolder("c://WINDOWS//Desktop", true); //把你的Desktop目錄刪除,但因爲desktop是系統的東西,所以不能全部刪除,但.........
-->
</SCRIPT>

DriveExists(盤符) //檢查一個盤是否存在,如果存在就返會真,不存在就返回.......
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
hasDriveD = fso.DriveExists("d"); //檢查系統是否有D盤存在
hasDriveZ = fso.DriveExists("z"); //檢查系統是否有Z盤存在
if (hasDriveD) alert("你的系統內有一個D盤");
if (!hasDriveZ) alert("你的系統內沒有Z盤");
-->
</SCRIPT>

FileExists(文件名) //檢查一個文件是否存在,如果存在就返會真,不存在就返回.......
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
fileName = fso.FileExists("c://autoexec.bat");
if (fileName) alert("你在C盤中有autoexec.bat文件,按下確定後這個文件將被刪除!"); //開個玩笑:)
-->
</SCRIPT>

FolderExists(目錄名) //檢查一個目錄是否存在,如果存在就返會真,不存在就返回.......
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
folderName = fso.FolderExists("c://WINDOWS//Fonts");
if (folderName) alert("按下確定後系統的字庫將被刪除!"); //開個玩笑:)
-->
</SCRIPT>

GetAbsolutePathName(文件對象) //返回文件對象在系統的絕對路徑
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
pathName = fso.GetAbsolutePathName("c://autoexec.bat");
alert(pathName);
-->
</SCRIPT>

GetBaseName(文件對象) //返回文件對象的文件名
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
baseName = fso.GetBaseName("c://autoexec.bat"); //取得autoexec.bat的文件名autoexec
alert(baseName);
-->
</SCRIPT>

GetExtensionName(文件對象) //文件的後綴
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
exName = fso.GetExtensionName("c://autoexec.bat"); //取得autoexec.bat後綴bat
alert(exName);
-->
</SCRIPT>

GetParentFolderName(文件對象) //取得父級的目錄名
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
parentName = fso.GetParentFolderName("c://autoexec.bat"); //取得autoexec.bat的父級目錄C盤
alert(parentName);
-->
</SCRIPT>

GetSpecialFolder(目錄代碼) //取得系統中一些特別的目錄的路徑,目錄代碼有3個分別是 0:安裝Window的目錄 1:系統文件目錄 2:臨時文件目錄
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
tmpFolder = fso.GetSpecialFolder(2); //取得系統臨時文件目錄的路徑 如我的是 C:/windows/temp
alert(tmpFolder);
-->
</SCRIPT>

GetTempName() //生成一個隨機的臨時文件對象,會以rad帶頭後面跟着些隨機數,就好象一些軟件在安裝時會生成*.tmp
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
tmpName = fso.GetTempName(); //我在測試時就生成了radDB70E.tmp
alert(tmpName);
-->
</SCRIPT>

MoveFile(源文件, 目標文件) //把源文件移到目標文件的位置
<SCRIPT LANGUAGE="javascript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
var newpath = fso.MoveFile("c://autoexec.bat", "d://autoexec.bat"); //把C盤的autoexec.bat文件移移動到D盤
-->
</SCRIPT>

你可能希望對文件改名。爲了跟蹤所有的文檔,你將要重新命名它們以便唯一,這樣就可以被系統容易地區
別。很不幸,FSO不允許簡單的文件改名操作,所以我們不得不修改一下。

< %
' create the fso object
set fso = Server.Createobject("Scripting.FileSystemObject")
path = "c: emp est.txt"
strDate = Replace(Date(), "/", "")
strDir = "c:inetpubwwwrootarticles" & strDate
strNewFileName = Hour(Now) & "_" & Minute(Now) & "_" &
second(Now) & ".html"

' open the old file
set file = fso.opentextfile(path, 1) < -- For reading
strText = file.readall
set file = nothing

' check for and/or create folder
if not fso.folderexists(Server.MapPath(strDir)) then
set f = fso.CreateFolder(Server.MapPath(strDir))
else
set f = fso.GetFolder(Server.MapPath(strDir))
end if

' create and write new file
set file = fso.Createtextfile(f.path & "" & strNewFileName)
file.write(strText)
set f = nothing
file.close
set file = nothing

' delete the old file
fso.DeleteFile(path & "" & rst("FileName") & i)
' clean up
set fso = nothing
%>

   FSO能力的不足在這裏卻成了優勢,我們可以一次執行2步。首先,打開文件並讀入文件的內容。假設這裏要創建一個
唯一的文件夾和一個唯一的文件來存儲文章。然而,因爲文件夾的路徑每天都將改變,所以必須首先檢查是否文件夾已經
存在,如果不存在,就創建它。這在if not fso.folderexists代碼段完成。然後,取得那個路徑,創建一個新的文件。新
文件建立完成後,刪除掉舊文件,這通過fso.DeleteFile來完成。

   這2步就是:對文件改名,然後移動到一個更合適的目錄下。注意,在這裏還可以對文件進行更多地操作,比如在寫
入新文件前進行一下內容的編輯。

   FSO確實存在一些弱點 - 比如,它很難處理二進制文件,這包括Word文檔、許多圖形格式的文件和其他一些文件。然而你仍然可以用其他的方式操作這些文件 - 移動它們、刪除它們,等等。你不能做的就是對它們進行打開或者寫操作。
   另外一個限制是對於文件長度的問題。當立刻讀寫一些內容時,所有的信息都存儲在內存中 - 內容越多,消耗的內存就越大。這將使每個工作都變得慢起來。所以,如果需要操作非常大的文件,或者大量的小文件時,考慮將文件分割成小塊,並且經常的清除內存。將應用程序融入進COM對象組件,也能大大地提高程序的速度。

   同樣,你也不能使用FSO來管理權限以及文件、文件夾的屬性,執行安全加密的一個很好方法就是將前面提到的留言簿文件設置爲只讀,在需要時再設置爲可寫,然後再修改回來。這個方法經常在CGI和Perl使用,但是很不幸,還沒有令人滿意的方法來用FSO實現。

   還能用FSO做什麼?

   在FSO中還有許多很棒的功能,但許多人沒有意識到。這些功能常常是在你感到做某些事情很難後才發現的,這時你經常要感嘆到:要是我早知道這個方法就好了!

   下面列舉一下這些不常用但是卻非常酷的功能:

   很少被瞭解的FSO功能
GetSpecialFolder Method 返回特定的Windows文件夾的路徑: Windows安裝目錄;Windows系統目錄;Windows臨時目錄 FSO.GetSpecialFolder([0, 1, or 2])
GetTempName Method 返回一個隨機產生的文件或者目錄名字,用於需要存儲臨時數據時
GetAbsolutePathName Method 返回文件夾的絕對路徑(類似於Server.MapPath)。
比如,FSO.GetAbsolutePathName("region") 將返回類似於下面的結果:"c:mydocsmyfolder egion"
GetExtensionName Method 返回路徑中最後部分的擴展名
(比如:FSO.GetExtensionName("c:docs est.txt") 將返回txt)
GetBaseName and GetParentFolder Methods 返回路徑中最後部分的父文件夾
(比如:FSO.GetParentFolder ("c:docsmydocs") 將返回'docs')
Drives Property 返回所有本地可用驅動器的集合,用於建立資源瀏覽器樣的用戶接口。

   使用上面的功能時,最好建立好出錯處理的代碼。因爲如果需要的參數不存在,將會產生麻煩的信息。

   總而言之,FSO的功能很強大,這裏介紹的僅僅是冰山一角。你可以使用FSO建立功能強大的應用程序,簡單地完成許多任務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章