這幾天用js寫一個讀寫文件的程序,在此記錄一下遇到的問題~~html
最初的程序以下:spring
//讀文件瀏覽器
function readFile(filename){app
var fso = new ActiveXObject("Scripting.FileSystemObject"); 函數
var f = fso.OpenTextFile(filename,1); oop
var s = "";測試
while (!f.AtEndOfStream)firefox
s += f.ReadLine()+"\n";htm
f.Close();ip
return s;
}
//寫文件
function writeFile(filename,filecontent){
var fso, f, s ;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.OpenTextFile(filename,8,true);
f.WriteLine(filecontent);
f.Close();
alert('ok');
}
這兩個函數在參數filename爲絕對路徑時是沒問題的,可是若爲相對路徑則沒法正確運行~~~在網上查了很多資料,有人說OpenTextFile()的第一個參數既能夠是絕對路徑也能夠是相對路徑,也有人說只能是絕對路徑~~
不管孰是孰非,我確實是用了相對路徑時就沒法正確運行。可是程序的移植性又要求參數不能直接傳絕對路徑~
後來想到document.location.pathname包含當前路徑信息,不如用它作相應處理以得到當前路徑,再和須要打開的文件連在一塊不就成了絕對路徑了?捏哈哈~~~
因而有了如下代碼:
//獲取絕對地址
function abPath(){
var absolutePath = '';
var pathArray = new Array();
var currentFileLocation = document.location.pathname; //alert(currentFileLocation);
pathArray = currentFileLocation.split("\\");
pathArray[0] = pathArray[0].substr(1,pathArray[0].length-1);
/***********************************************************/
/*作這樣的處理是由於alert(currentFileLocation)彈出:*/
/* /D:\alpha\test.html */
/* 固然test.html是調用這些函數的當前頁面啦 */
/***********************************************************/
for(var i = 0; i<pathArray.length; i++){
if(pathArray[i] != 'test.html')
absolutePath = absolutePath + pathArray[i] + "\\";
}//alert(absolutePath);
return absolutePath;
}
//讀文件
function readFile(filename){
var absolutePath = abPath();
filename = absolutePath + filename; //alert(filename);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile(filename,1);
var s = "";
while (!f.AtEndOfStream)
s += f.ReadLine()+"\n";
f.Close();
s = parseInt(s);
return s;
}
//寫文件
function writeFile(filename,filecontent){
var absolutePath = abPath();
filename = absolutePath + filename; //alert(filename);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile(filename,2,true);
f.WriteLine(filecontent);
f.Close();
}
這下好了,調用的時候能夠傳相對路徑了~~~~
我用來測試的瀏覽器是IE6,後來發如今IE七、IE8中卻又沒法正確運行了~~~~用alert(currentFileLocation)一測試,發現它們彈出的路徑信息爲:/D:/alpha/test.html,與IE6的斜槓方向不一樣,因此要作不一樣的處理,同時還要增長瀏覽器版本判斷,代碼以下:
//判斷是否ie6
function isIe6(){
var browserName = navigator.appName; //alert(browserName);
var browserVer = navigator.userAgent.toLowerCase();
if(browserName == "Microsoft Internet Explorer"){
if(browserVer.match(/msie ([\d.]+)/)[1] < 7) return true;
}
else return false;
}
//獲取絕對地址
function abPath(){
var absolutePath = '';
var pathArray = new Array();
var loopindex = 0;
var currentFileLocation = document.location.pathname; alert(currentFileLocation);
if(isIe6()){
pathArray = currentFileLocation.split("\\");
pathArray[0] = pathArray[0].substr(1,pathArray[0].length-1);
} else {
pathArray = currentFileLocation.split("/");
}
if(pathArray[0] == '')loopindex = 1;
for(loopindex; loopindex<pathArray.length; loopindex++){
if(pathArray[loopindex] != 'test.html')
absolutePath = absolutePath + pathArray[loopindex] + "\\";
}//alert(absolutePath);
return absolutePath;
}
//讀文件
function readFile(filename){
var absolutePath = abPath();
filename = absolutePath + filename; //alert(filename);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile(filename,1);
var s = "";
while (!f.AtEndOfStream)
s += f.ReadLine()+"\n";
f.Close();
s = parseInt(s);
return s;
}
//寫文件
function writeFile(filename,filecontent){
var absolutePath = abPath();
filename = absolutePath + filename; //alert(filename);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile(filename,2,true);
f.WriteLine(filecontent);
f.Close();
}
到此IE瀏覽器均可以正確讀寫文件了,有個缺憾就是在firefox瀏覽器中不能正確運行,由於firefox瀏覽器貌似不支持ActiveXObject控件,於是var fso = new ActiveXObject("Scripting.FileSystemObject"); 也就沒什麼用了~~唉~~~
在傳相對路徑參數時,要用右斜槓,還要轉義,也就是要用兩個右斜槓分隔……用左斜槓或者單斜槓都不行,我不知道是我比較特殊仍是你們都這樣~~~