<script> var WshShell = new ActiveXObject( "WScript.Shell "); var Desktop = WshShell.SpecialFolders( "Desktop "); alert(Desktop); </script> <SCRIPT> var fso = new ActiveXObject("Scripting.FileSystemObject"); var tmppath = fso.GetSpecialFolder(2); alert (tmppath); </SCRIPT>
1、功能實現核心:FileSystemObject 對象 要在javascript中實現文件操做功能,主要就是依靠FileSystemobject對象。 2、FileSystemObject編程 使用FileSystemObject 對象進行編程很簡單,通常要通過以下的步驟: 建立FileSystemObject對象、應用相關方法、訪問對象相關屬性 。 (一)建立FileSystemObject對象 建立FileSystemObject對象的 代碼只要1行: var fso = new ActiveXObject("Scripting.FileSystemObject"); 上述代碼執行後,fso就成爲一個FileSystemObject對象實例。 (二)應用相關方法 建立對象實例後,就能夠使用對象的相關方法了。好比,使用CreateTextFile方法建立一個文本文件: var fso = new ActiveXObject("Scripting.FileSystemObject"); var f1 = fso.createtextfile("c:\\myjstest.txt",true"); (三)訪問對象相關屬性 要訪問對象的相關屬性,首先要創建指向對象的句柄,這就要經過get系列方法實現:GetDrive負責獲取驅動器信息,GetFolder負責獲取文件夾信息,GetFile負責獲取文件信息。好比,指向下面的代碼後,f1就成爲指向文件c:\test.txt的句柄: var fso = new ActiveXObject("Scripting.FileSystemObject"); var f1 = fso.GetFile("c:\\myjstest.txt"); 而後,使用f1訪問對象的相關屬性。好比: var fso = new ActiveXObject("Scripting.FileSystemObject"); var f1 = fso.GetFile("c:\\myjstest.txt"); alert("File last modified: " + f1.DateLastModified); 執行上面最後一句後,將顯示c:\myjstest.txt的最後修改日期屬性值。 但有一點請注意:對於使用create方法創建的對象,就沒必要再使用get方法獲取對象句柄了,這時直接使用create方法創建的句柄名稱就能夠: var fso = new ActiveXObject("Scripting.FileSystemObject"); var f1 = fso.createtextfile("c:\\myjstest.txt",true"); alert("File last modified: " + f1.DateLastModified); 3、操做驅動器(Drives) 使用FileSystemObject對象來編程操做驅動器(Drives)和文件夾(Folders)很容易,這就象在Windows文件瀏覽器中對文件進行交互操做同樣,好比:拷貝、移動文件夾,獲取文件夾的屬性。 (一)Drives對象屬性 Drive對象負責收集系統中的物理或邏輯驅動器資源內容,它具備以下屬性: l TotalSize:以字節(byte)爲單位計算的驅動器大小。 l AvailableSpace或FreeSpace:以字節(byte)爲單位計算的驅動器可用空間。 l DriveLetter:驅動器字母。 l DriveType:驅動器類型,取值爲:removable(移動介質)、fixed(固定介質)、network(網絡資源)、CD-ROM或者RAM盤。 l SerialNumber:驅動器的系列碼。 l FileSystem:所在驅動器的文件系統類型,取值爲FAT、FAT32和NTFS。 l IsReady:驅動器是否可用。 l ShareName:共享名稱。 l VolumeName:卷標名稱。 l Path和RootFolder:驅動器的路徑或者根目錄名稱。 (二)Drive對象操做例程 下面的例程顯示驅動器C的卷標、總容量和可用空間等信息: var fso, drv, s =""; fso = new ActiveXObject("Scripting.FileSystemObject"); drv = fso.GetDrive(fso.GetDriveName("c:\\")); s += "Drive C:" + " - "; s += drv.VolumeName + "\n"; s += "Total Space: " + drv.TotalSize / 1024; s += " Kb" + "\n"; s += "Free Space: " + drv.FreeSpace / 1024; s += " Kb" + "\n"; alert(s); 4、操做文件夾(Folders) 涉及到文件夾的操做包括建立、移動、刪除以及獲取相關屬性。 Folder對象操做例程 : 下面的例程將練習獲取父文件夾名稱、建立文件夾、刪除文件夾、判斷是否爲根目錄等操做: var fso, fldr, s = ""; // 建立FileSystemObject對象實例 fso = new ActiveXObject("Scripting.FileSystemObject"); // 獲取Drive 對象 fldr = fso.GetFolder("c:\\"); // 顯示父目錄名稱 alert("Parent folder name is: " + fldr + "\n"); // 顯示所在drive名稱 alert("Contained on drive " + fldr.Drive + "\n"); // 判斷是否爲根目錄 if (fldr.IsRootFolder) alert("This is the root folder."); else alert("This folder isn't a root folder."); alert("\n\n"); // 建立新文件夾 fso.CreateFolder ("C:\\Bogus"); alert("Created folder C:\\Bogus" + "\n"); // 顯示文件夾基礎名稱,不包含路徑名 alert("Basename = " + fso.GetBaseName("c:\\bogus") + "\n"); // 刪除建立的文件夾 fso.DeleteFolder ("C:\\Bogus"); alert("Deleted folder C:\\Bogus" + "\n"); 5、操做文件(Files) 對文件進行的操做要比以上介紹的驅動器(Drive)和文件夾(Folder)操做複雜些,基本上分爲如下兩個類別:對文件的建立、拷貝、移動、刪除操做和對文件內容的建立、添加、刪除和讀取操做。下面分別詳細介紹。 (一)建立文件 一共有3種方法可用於建立一個空文本文件,這種文件有時候也叫作文本流(text stream)。 第一種是使用CreateTextFile方法。代碼以下: var fso, f1; fso = new ActiveXObject("Scripting.FileSystemObject"); f1 = fso.CreateTextFile("c:\\testfile.txt", true); 第二種是使用OpenTextFile方法,並添加上ForWriting屬性,ForWriting的值爲2。代碼以下: var fso, ts; var ForWriting= 2; fso = new ActiveXObject("Scripting.FileSystemObject"); ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true); 第三種是使用OpenAsTextStream方法,一樣要設置好ForWriting屬性。代碼以下: var fso, f1, ts; var ForWriting = 2; fso = new ActiveXObject("Scripting.FileSystemObject"); fso.CreateTextFile ("c:\\test1.txt"); f1 = fso.GetFile("c:\\test1.txt"); ts = f1.OpenAsTextStream(ForWriting, true); (二)添加數據到文件 當文件被建立後,通常要按照「打開文件->填寫數據->關閉文件」的步驟實現添加數據到文件的目的。 打開文件可以使用FileSystemObject對象的OpenTextFile方法,或者使用File對象的OpenAsTextStream方法。 填寫數據要使用到TextStream對象的Write、WriteLine或者WriteBlankLines方法。在同是實現寫入數據的功能下,這3者的區別在於:Write方法不在寫入數據末尾添加新換行符,WriteLine方法要在最後添加一個新換行符,而WriteBlankLines則增長一個或者多個空行。 關閉文件可以使用TextStream對象的Close方法。 (三)建立文件及添加數據例程 下面的代碼將建立文件、添加數據、關閉文件幾個步驟結合起來進行應用: var fso, tf; fso = new ActiveXObject("Scripting.FileSystemObject"); // 建立新文件 tf = fso.CreateTextFile("c:\\testfile.txt", true); // 填寫數據,並增長換行符 tf.WriteLine("Testing 1, 2, 3.") ; // 增長3個空行 tf.WriteBlankLines(3) ; // 填寫一行,不帶換行符 tf.Write ("This is a test."); // 關閉文件 tf.Close(); (四)讀取文件內容 從文本文件中讀取數據要使用TextStream對象的Read、ReadLine或ReadAll 方法。Read方法用於讀取文件中指定數量的字符; ReadLine方法讀取一整行,但不包括換行符;ReadAll方法則讀取文本文件的整個內容。讀取的內容存放於字符串變量中,用於顯示、分析。 方法或者屬性 描述 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() 打開一個文件流 f.Files //目錄下全部文件集合 f.attributes //文件屬性 Case 0 Str="普通文件。沒有設置任何屬性。 " Case 1 Str="只讀文件。可讀寫。 " Case 2 Str="隱藏文件。可讀寫。 " Case 4 Str="系統文件。可讀寫。 " Case 16 Str="文件夾或目錄。只讀。 " Case 32 Str="上次備份後已更改的文件。可讀寫。 " Case 1024 Str="連接或快捷方式。只讀。 " Case 2048 Str=" 壓縮文件。只讀。" f.Datecreated // 建立時間 f.DateLastAccessed //上次訪問時間 f.DateLastModified // 上次修改時間 f.Path //文件路徑 f.Name //文件名稱 f.Type //文件類型 f.Size // 文件大小(單位:字節) f.ParentFolder //父目錄 f.RootFolder // 根目錄 javascript
//獲取當前文件目錄下全部文件路徑 searchFiles = function() { // alert("window.location.href:"+window.location.href); // alert("window.location:"+window.location); // alert("location.href:"+location.href); // alert("parent.location.href:"+parent.location.href); // alert("top.location.href:"+top.location.href); // alert("document.location.href:"+document.location.href); // alert("document.URL:"+document.URL); // 獲取當前文件所在路徑 // 方法一 // var str = location.href; // var arr = str.split("/"); // delete arr[arr.length - 1]; // var dir = arr.join("/"); // alert(dir); // 獲取當前文件所在路徑 // 方法二 var path = document.URL; path = path.substr(0, path.lastIndexOf("\\") + 1); path = path.substr(path.indexOf("//") + 2, path.length); alert(path); var fso = new ActiveXObject("Scripting.FileSystemObject"); var f = fso.GetFolder(path + "image\\"); var fc = new Enumerator(f.files); // 如下內容是顯示文件名 for (; !fc.atEnd(); fc.moveNext()) { document.write(fc.item() + "<br>"); } // 如下內容是顯示目錄名 fk = new Enumerator(f.SubFolders); for (; !fk.atEnd(); fk.moveNext()) { document.write(fk.item() + "<br>"); } }; //BuildPath(路徑,文件名) //這個方法會對給定的路徑加上文件,並自動加上分界符 testBuildPath = function(path, filesName) { var fso = new ActiveXObject("Scripting.FileSystemObject"); var newpath = fso.BuildPath("c:\\tmp", "51js.txt"); // 生成 c:\tmp\51js.txt的路徑 alert(newpath); }; // CopyFile(源文件, 目標文件, 覆蓋) // 複製源文件到目標文件,當覆蓋值爲true時,若是目標文件存在會把文件覆蓋 testCopyFile = function(oldpath, newpath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); var newpath = fso.CopyFile("c:\\autoexec.bat", "d:\\autoexec.bak"); alert(newpath); }; // CopyFolder(對象目錄,目標目錄 ,覆蓋) // 複製對象目錄到目標目錄,當覆蓋爲true時,若是目標目錄存在會把文件覆蓋 testCopyFolder = function(oldpath, newpath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); fso.CopyFolder("c:\\WINDOWS\\Desktop", "d:\\"); // 把C盤的Desktop目錄複製到D盤的根目錄 }; // CreateFolder(目錄名) // 建立一個新的目錄 testCopyFolder = function(newpath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); var newFolderName = fso.CreateFolder("c:\\51JS"); // 在C盤上建立一個51JS的目錄 alert(newFolderName); }; // CreateTextFile(文件名, 覆蓋) // 建立一個新的文件,若是此文件已經存在,你須要把覆蓋值定爲true testCreateTextFile = function(oldpath, newpath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); // 腳本將在C盤建立一個叫autoexec51JS.bat的文件 var newFileObject = fso.CreateTextFile("c:\\autoexec51JS.bat", true); alert(newFileObject); }; // DeleteFile(文件名, 只讀?) // 刪除一個文件,若是文件的屬性是隻讀的話,你須要把只讀值設爲true testDeleteFile = function(oldpath, newpath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); // 爲了安全我先把要刪除的autoexec.bat備份到你的D盤 var newpath = fso.CopyFile("c:\\autoexec.bat", "d:\\autoexec.bat"); alert(newpath); // 把C盤的autoexec.bat文件刪除掉 fso.DeleteFile("c:\\autoexec.bat", true); }; // DeleteFolder(文件名, 只讀?) // 刪除一個目錄,若是目錄的屬性是隻讀的話,你須要把只讀值設爲true testDeleteFolder = function(oldpath, newpath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); // 爲了安全我先把你C盤的Desktop目錄複製到你D盤的根目錄 fso.CopyFolder("c:\\WINDOWS\\Desktop", "d:\\"); // 把你的Desktop目錄刪除,但由於desktop是系統的東西,因此不能所有刪除,但......... fso.DeleteFolder("c:\\WINDOWS\\Desktop", true); }; // DriveExists(盤符) // 檢查一個盤是否存在,若是存在就返會真,不存在就返回....... testDriveExists = function(diskDrive) { var fso = new ActiveXObject("Scripting.FileSystemObject"); hasDriveD = fso.DriveExists("d"); // 檢查系統是否有D盤存在 hasDriveZ = fso.DriveExists("z"); // 檢查系統是否有Z盤存在 if (hasDriveD) alert("你的系統內有一個D盤"); if (!hasDriveZ) alert("你的系統內沒有Z盤"); }; // FileExists(文件名) // 檢查一個文件是否存在,若是存在就返會真,不存在就返回....... testFileExists = function(filePath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); fileName = fso.FileExists("c:\\autoexec.bat"); if (fileName) alert("你在C盤中有autoexec.bat文件,按下肯定後這個文件將被刪除!"); // 開個玩笑:) }; // FolderExists(目錄名) // 檢查一個目錄是否存在,若是存在就返會真,不存在就返回....... testFolderExists = function(folderPath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); folderName = fso.FolderExists("c:\\WINDOWS\\Fonts"); if (folderName) alert("按下肯定後系統的字庫將被刪除!"); // 開個玩笑:) }; // GetAbsolutePathName(文件對象) // 返回文件對象在系統的絕對路徑 testGetAbsolutePathName = function(filePath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); pathName = fso.GetAbsolutePathName("c:\\autoexec.bat"); alert(pathName); }; // GetBaseName(文件對象) // 返回文件對象的文件名 testGetBaseName = function(filePath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); baseName = fso.GetBaseName("c:\\autoexec.bat"); // 取得autoexec.bat的文件名autoexec alert(baseName); }; // GetExtensionName(文件對象) // 文件的後綴 testGetExtensionName = function(filePath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); exName = fso.GetExtensionName("c:\\autoexec.bat"); // 取得autoexec.bat後綴bat alert(exName); }; // GetParentFolderName(文件對象) // 取得父級的目錄名 testGetParentFolderName = function(filePath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); parentName = fso.GetParentFolderName("c:\\autoexec.bat"); // 取得autoexec.bat的父級目錄C盤 alert(parentName); }; // GetSpecialFolder(目錄代碼) // 取得系統中一些特別的目錄的路徑,目錄代碼有3個分別是 0:安裝Window的目錄 1:系統文件目錄 2:臨時文件目錄 testGetSpecialFolder = function(code) { var fso = new ActiveXObject("Scripting.FileSystemObject"); tmpFolder = fso.GetSpecialFolder(2); // 取得系統臨時文件目錄的路徑 如個人是 // C:\windows\temp alert(tmpFolder); }; // GetTempName() // 生成一個隨機的臨時文件對象,會以rad帶頭後面跟着些隨機數,就好象一些軟件在安裝時會生成*.tmp testGetSpecialFolder = function() { var fso = new ActiveXObject("Scripting.FileSystemObject"); tmpName = fso.GetTempName(); // 我在測試時就生成了radDB70E.tmp alert(tmpName); }; // MoveFile(源文件, 目標文件) // 把源文件移到目標文件的位置 testMoveFile = function(oldpath, newpath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); var newpath = fso.MoveFile("c:\\autoexec.bat", "d:\\autoexec.bat"); // 把C盤的autoexec.bat文件移移動到D盤 alert(newpath); };