史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   html. 請問一下自己網頁要做一個網頁內的搜尋引擎要如何撰寫程式?? (http://forum.slime.com.tw/thread231201.html)

飛行船大大 2008-06-10 10:57 AM

html. 請問一下自己網頁要做一個網頁內的搜尋引擎要如何撰寫程式??
 
如下圖:我用forntPage在c:做了一些html 連結成一個web
請問一下自己網頁要做一個網頁內的搜尋引擎要如何撰寫程式??
我在c碟 執行時 第1張圖中打textbox 搜尋,出現錯誤 第2張圖的錯誤畫面如下 http://huhuge.hp.infoseek.co.jp/post_jpg/Picture9.gif
<第1張圖>

http://huhuge.hp.infoseek.co.jp/post_jpg/Picture10.gif
<第2張圖>

想請教
1. 我不想要上傳網頁到 網際網路http:// ,也不是要搜尋 網際網路上的網頁. 只想在 c:\ 中隨時執行index.html 就可以搜尋c: 中自己web中的各篇 .html 的標題和.html全文
要如何才能達成嗎?
2. 那兒有 較好的 .html搜尋引擎. 可以套用. (麻煩給個連接 或.html範例 均可 )

多謝回復!

飛鳥 2008-06-10 02:41 PM

很難耶,不是那麼簡單

因為先把內容找出來,再作成資料庫,建索引後,再使用資料庫中提供的全域檢索功能

才能作出你要的東西,而且只是html是沒有查詢功能,至少要cgi,asp,php等語言才能作

html只提功送出和接收資料的功能而已

你要不要考慮用google desktop

他的動作也是要先作全硬碟搜尋,再把檔名作索引,再提供你電腦搜尋功能,你可以模仿他的原理

飛行船大大 2008-06-10 08:32 PM

引用:

作者: 飛鳥 (文章 1964244)
很難耶,不是那麼簡單

因為先把內容找出來,再作成資料庫,建索引後,再使用資料庫中提供的全域檢索功能

才能作出你要的東西,而且只是html是沒有查詢功能,至少要cgi,asp,php等語言才能作

html只提功送出和接收資料的功能而已

你要不要考慮用google desktop

他的動作也是要先作全硬碟搜尋,再把檔名作索引,再提供你電腦搜尋功能,你可以模仿他的原理

想不到 .html 無法在c: 的web做搜尋 真令人失望
請問google desktop 這軟體 能只指定做某一目錄的索引 ?? (我不想做全硬碟的索引)

cwvdavid 2008-06-11 11:33 AM

很難做 不表示不能做...
而是...真的不好做...而且極為不方便, 使用上非常受限...


這是國外的人寫的...可以直接下載(台灣不會有人寫這個的吧)
http://www.codeproject.com/KB/script..._in_files.aspx
(要登入, 要加入會員)

如果懶的加入, 請直接把下面的資料存成網頁檔, 然後在本機執行即可
語法:

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<style>
.Field {color: black; border: 1px solid #FFFFFF; background-color: #FFCC00;}
.Find  {color:blue; font: 10px Arial;}
</style>
<script>
var Fo =new ActiveXObject("Scripting.FileSystemObject");
var StrOut = new String();
var FileName = new String();
var Extention = new String();

function FindFile(FOo)
{
        var FSo = new Enumerator(FOo.Files);
        for(i=0;!FSo.atEnd();FSo.moveNext())
        {
                if(FileName == "*" ||  FSo.item().name.slice(0,FSo.item().name.lastIndexOf(".")).toLowerCase().indexOf(FileName)>-1)
                        if(Extention == "*" || FSo.item().name.slice(FSo.item().name.lastIndexOf(".")+1).toLowerCase().indexOf(Extention)>-1){
                                StrOut += "<tr "+ ((i%2)? "":"bgcolor=#DDAA55")  +"><td width=50%><font class=find>" + FSo.item().name + "</font></td><td width=25%><font class=find>" + FSo.item().type + "</font></td><td width=50%><font class=find>"+ String(FSo.item().size/(1024*1024)).slice(0,3) +" MB</font></td></tr>";
                                i++
                                }
        }
}

function Scan()
{
        FileName = (search.value.lastIndexOf(".")>-1)? search.value.slice(0,search.value.lastIndexOf(".")):(search.value.length>0)? search.value.toLowerCase():"*"; //Get Searched File Name
        Extention = (search.value.lastIndexOf(".")>-1)? search.value.slice(search.value.lastIndexOf(".")+1).toLowerCase():"*"; // Get Searched File Extention Name

        if(path.value.length>0 && Fo.FolderExists(path.value)){
                StrOut = "<table border=0 width=100% cellspacing=0>"
                FindFile(Fo.GetFolder(path.value));
                outPut.innerHTML = StrOut+"</table>";
                }
        else alert("Insert Correct Path Address");
}
</script>

<BODY topmargin="0" leftmargin="0">

<table border=0 width=100% cellspacing="0" style="border-collapse: collapse" cellpadding="2"><tr>
        <td dir="ltr" bgcolor="#FFCC00"><b><font face="Arial" size="2">Named :
    </font></b> </td>
        <td dir="ltr" bgcolor="#FFCC00">
    <input size=50 type=text id=search name=search class="Field"></td>
        </tr><tr>
        <td dir="ltr" bgcolor="#FFCC00">
    <p dir="ltr"><b><font face="Arial" size="2">Path : </font></b> </td>
        <td bgcolor="#FFCC00">
    <input size=50 type=text value="C:\" id=path name=path class="Field" ></td>
        </tr><tr>
        <td bgcolor="#FFCC00">&nbsp;</td>
        <td bgcolor="#FFCC00">
    <input type=button value="        Scan          " onclick=Scan() class="Field"></td>
        </tr><tr>
        <td colspan=2 align=right bgcolor="#FFCC00"><font face=arial size=2><b>Search Result</b></font><hr></td>
        </tr><tr>
        <td colspan=2 bgcolor="#FFCC00"><div id=outPut></div></td>
        </tr></table>
</BODY>
</HTML>


另外, 如果想找關於JavaScript FSO的資料,
可以到Google輸入[javascript fso Files], 即可找到很多

cwvdavid 2008-06-17 11:15 AM

飛行船, 你寫的如何了?
我一直在等你的成果說~

飛行船大大 2008-06-18 04:07 AM

引用:

作者: cwvdavid (文章 1968880)
飛行船, 你寫的如何了?
我一直在等你的成果說~

在這論壇 ~看來cwvdavid大 是我最好的朋友了 這也值回票價了:on_79:
不知道你有繼續關注. 所以忘記回應.
我有試過你的java 方式.滿不錯的 可以搜尋標題, 但可惜無法搜尋 html內部的文字 .
所以目前仍然是 用xp ->開始 -->搜尋 -->指定目錄 -->指定內含文字
這樣子來找.
或是用我自己曾寫過的一個搜尋工具(可搜尋vb源碼的) 找這些html內部的文字(速度比xp快2~3倍).

cwvdavid 2008-06-18 11:59 AM

可以哦...javaScript可以搜尋文字哦...
可以哦......
可以哦......
可以哦......(回音)
可以哦......(回音)
可以哦......(回音)
可以哦......(回音)
可以哦......(回音)
...
只要把html讀取進來, 然後偵測字串...即可...

cwvdavid 2008-06-18 01:29 PM

這是我改過的版本, 你試看看
語法:

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<style>
.Field {color: black; border: 1px solid #FFFFFF; background-color: #FFCC00;}
.Find  {color:blue; font: 10px Arial;}
</style>
<script>
var Fo =new ActiveXObject("Scripting.FileSystemObject");
var StrOut = new String();
var FileName = new String();
var Extention = new String();

function FindFile(FOo)
{
        cwvdavid_fileRead = new ActiveXObject("Scripting.FileSystemObject");

        var FSo = new Enumerator(FOo.Files);
        for(i=0;!FSo.atEnd();FSo.moveNext())
        {
                if(FileName == "*" ||  FSo.item().name.slice(0,FSo.item().name.lastIndexOf(".")).toLowerCase().indexOf(FileName)>-1)
                {
                        if(Extention == "*" || FSo.item().name.slice(FSo.item().name.lastIndexOf(".")+1).toLowerCase().indexOf(Extention)>-1)
                        {
                                hasWord = "[x]";

                                //把找到的檔案列出來...
                               
                                //路徑的尾巴要加\, 不然找不到
                                mypath = path.value;
                               
                                //檢查mypath的尾巴是否有\, 如果沒有就加上去...
                                if(mypath.lastIndexOf("\\")+1 != mypath.length)
                                {
                                        mypath = mypath + "\\";
                                }
                               

                                ts = cwvdavid_fileRead.OpenTextFile(mypath + FSo.item().name, 1);
                               
                                myReadWord = ts.ReadAll();
                                if(myReadWord.indexOf(searchWord.value) != -1)
                                {
                                        //如果有找到文字...就列出該檔案
                                        StrOut += "<tr "+ ((i%2)? "":"bgcolor=#DDAA55")  +"><td width=50%><font class=find>" + FSo.item().name + "</font></td><td width=25%><font class=find>" + FSo.item().type + "</font></td><td width=50%><font class=find>"+ String(FSo.item().size/(1024*1024)).slice(0,3) +" MB</font></td></tr>";
                                }
                                ts.Close();

                                i++
                        }
                }
        }
}

function Scan()
{
        FileName = (search.value.lastIndexOf(".")>-1)? search.value.slice(0,search.value.lastIndexOf(".")):(search.value.length>0)? search.value.toLowerCase():"*"; //Get Searched File Name
        Extention = (search.value.lastIndexOf(".")>-1)? search.value.slice(search.value.lastIndexOf(".")+1).toLowerCase():"*"; // Get Searched File Extention Name

        if(path.value.length>0 && Fo.FolderExists(path.value))
        {
                StrOut = "<table border=0 width=100% cellspacing=0>"
                FindFile(Fo.GetFolder(path.value));
                outPut.innerHTML = StrOut+"</table>";
        }
        else alert("Insert Correct Path Address");
}
</script>

<BODY topmargin="0" leftmargin="0">

<table border=0 width=100% cellspacing="0" style="border-collapse: collapse" cellpadding="2"><tr>
        <td dir="ltr" bgcolor="#FFCC00"><b><font face="Arial" size="2">Named :</font></b></td>
        <td dir="ltr" bgcolor="#FFCC00">
    <input size=50 type=text id=search name=search class="Field" value="*.html"></td>
        </tr><tr>
        <td dir="ltr" bgcolor="#FFCC00">
    <p dir="ltr"><b><font face="Arial" size="2">Path : </font></b> </td>
        <td bgcolor="#FFCC00">
    <input size=50 type=text value="C:\" id=path name=path class="Field" ></td>
        </tr><tr>
        <td bgcolor="#FFCC00">要找的文字...</td>
        <td bgcolor="#FFCC00">
    <input size=50 type=text value="文字" id=path0 name=searchWord class="Field" ></td>
        </tr><tr>
        <td bgcolor="#FFCC00"> </td>
        <td bgcolor="#FFCC00">
    <input type=button value="        Scan          " onclick=Scan() class="Field"></td>
        </tr><tr>
        <td colspan=2 align=right bgcolor="#FFCC00"><font face=arial size=2><b>Search Result</b></font><hr></td>
        </tr><tr>
        <td colspan=2 bgcolor="#FFCC00"><div id=outPut></div></td>
        </tr></table>
</BODY>
</HTML>


飛行船大大 2008-06-19 05:07 AM

引用:

作者: cwvdavid (文章 1969641)
可以哦...javaScript可以搜尋文字哦...
可以哦......
可以哦......
可以哦......(回音)
可以哦......(回音)
可以哦......(回音)
可以哦......(回音)
可以哦......(回音)
...
只要把html讀取進來, 然後偵測字串...即可...

哈哈...你還加上 echo ....... 滿有趣味的.....(回音)
我試過了 速度也很快~ 看來您是這方面的專家 .....(回音)
終於可以派上用場.....(回音)
我一點也不會寫jave指令 但是可否請幫我多修正3個小地方~ 這樣你這程序就更完美了.....(回音)

1.畫面所填的path ,之下如果有許多子目錄.希望能遞回的向下層搜尋.因為web下通常還有下層目錄 內有htm網頁.

2. 在IE第一行上方總是會有 "為了協助保護 ....." 請問JAVA要如何改 不要讓此行出現.
http://huhuge.hp.infoseek.co.jp/post_jpg/Pic1.gif

3.當搜尋出來 許多項目例如10個項目
如果我 點某 第3項 ...我希望成像HTML 可以像hotlink 自動另開啟此html 到另一IE新視窗. 這樣可節省user許多時間.

感謝 你一直以來的熱心幫忙. 謝謝!
我這也有不少vb6的程式. 如果你有vb6方面的需要或設計.
請記得通知我.我應該可以找到(畢竟人是互相的) .....(回音)
(我pm 一個我的可搜尋源碼的p27.exe 送你. 請查收.)

++++++++++++++++++++++++++++++++++++++++++++++++++++
另外多請問一題(這樣應該也可以解決):
在.html 網頁中 我想多加一個文字 "搜尋" 當按中時 就直接呼叫我的p27.exe 來執行. 要如何寫這幾行的html語法?

cwvdavid 2008-06-19 11:48 AM

要加遞回的話你得等一等, 我有空再加上去,
另外, 你的程式我在XP開不起來, 只有 嗶一聲(作業系統預設Error的聲音), 就什麼都沒有了

(我都是用 [Effective File Search]這套在做搜尋的, 很好用, 也很方便)

飛行船大大 2008-06-19 05:55 PM

引用:

作者: cwvdavid (文章 1970287)
要加遞回的話你得等一等, 我有空再加上去,
另外, 你的程式我在XP開不起來, 只有 嗶一聲(作業系統預設Error的聲音), 就什麼都沒有了

(我都是用 [Effective File Search]這套在做搜尋的, 很好用, 也很方便)

我平時都只自己用, 竟忘記先打包成setup.exe 它別台pc才能用
已打包 在pm.

rank 2008-06-19 11:17 PM

其實是路過隨口問問
飛行船大大要把站內搜尋應用到何種方面?
還有你希望做到怎麼樣的效能(例如一秒能查多少篇)
就單純請益一下,說不定我往後會用到

飛行船大大 2008-06-20 10:03 AM

引用:

作者: rank (文章 1970825)
其實是路過隨口問問
飛行船大大要把站內搜尋應用到何種方面?
還有你希望做到怎麼樣的效能(例如一秒能查多少篇)
就單純請益一下,說不定我往後會用到

只是單純的搜尋 c:\ 之下的 html網頁而已 (如 1樓 )
對速度我並沒講究 .( 可惜 html 並無法 搜尋 c:\ 之下的 html網頁)

cwvdavid 2008-06-20 11:51 AM

我做了一些修改, 已經可以查子目錄了, 也可以直接執行點選找到的檔案...
另外, 關於安全性的問題, 那是微軟搞的...無解
語法:

<HTML lang=zh-TW>
<HEAD>
<TITLE>本機 檔案搜尋</TITLE>
<META http-equiv=Content-Type content="text/html; charset=big5">
</HEAD>
<style>
.Field {color: black; border: 1px solid #FFFFFF; background-color: #FFCC00;}
.Find  {color:blue; font: 12px Arial;}
</style>
<script>
var Fo =new ActiveXObject("Scripting.FileSystemObject");
var StrOut = new String();
var FileName = new String();
var Extention = new String();
var LimitFilesByDirectory = 100; //1個目錄內最多要檢查的檔案數...
var LimitFoldersByDirectory = 10; //1個目錄內最多要檢查的子目錄數...

function FindFile(FOo)
{
        cwvdavid_fileRead = new ActiveXObject("Scripting.FileSystemObject");

        var FSo = new Enumerator(FOo.Files); //取得 該目錄下的所有檔案...
        var subFOo = new Enumerator(FOo.SubFolders); //取得該目錄下的所有目錄...

        for(i=0;!FSo.atEnd();FSo.moveNext())
        {
                if(FileName == "*" ||  FSo.item().name.slice(0,FSo.item().name.lastIndexOf(".")).toLowerCase().indexOf(FileName)>-1)
                {
                        if(Extention == "*" || FSo.item().name.slice(FSo.item().name.lastIndexOf(".")+1).toLowerCase().indexOf(Extention)>-1)
                        {
                                hasWord = "[x]";

                                //把找到的檔案列出來...
                               
                                //路徑的尾巴要加\, 不然找不到
                                mypath = FOo.Path;
                               
                                //檢查mypath的尾巴是否有\, 如果沒有就加上去...
                                if(mypath.lastIndexOf("\\")+1 != mypath.length)
                                {
                                        mypath = mypath + "\\";
                                }
                               

                                ts = cwvdavid_fileRead.OpenTextFile(mypath + FSo.item().name, 1);
                               
                                myReadWord = ts.ReadAll();
                                if(myReadWord.indexOf(searchWord.value) != -1)
                                {
                                        //如果有找到文字...就列出該檔案
                                        StrOut += "<tr "+ ((i%2)? "":"bgcolor=#DDAA55")  +"><td width=20%><font class=find>" + FOo.Path + "</font></td><td width=30%><font class=find><a target=\"_blank\" href=\"" + mypath + FSo.item().name + "\">" + FSo.item().name + "</a></font></td><td width=25%><font class=find>" + FSo.item().type + "</font></td><td width=50%><font class=find>"+ String(FSo.item().size/(1024*1024)).slice(0,3) +" MB</font></td></tr>";
                                }
                                ts.Close();

                                i++
                                if(i >= LimitFilesByDirectory) break; //同一層的檔案只找前面 n 個...避免太多...沒完沒了...(尤其是誤選了什麼某個... I386的目錄)
                        }
                }
        }

        //找完檔案開始找資料夾...

        for(i=0;!subFOo.atEnd();subFOo.moveNext())
        {
                FindFile(Fo.GetFolder(subFOo.item().Path)); //使用遞迴.....
                i++;
                if(i >= LimitFoldersByDirectory) break; //同一層目錄只找前 n 個子目錄...避免太多...沒完沒了...
        }
}

function Scan()
{
        FileName = (search.value.lastIndexOf(".")>-1)? search.value.slice(0,search.value.lastIndexOf(".")):(search.value.length>0)? search.value.toLowerCase():"*"; //Get Searched File Name
        Extention = (search.value.lastIndexOf(".")>-1)? search.value.slice(search.value.lastIndexOf(".")+1).toLowerCase():"*"; // Get Searched File Extention Name

        if(path.value.length>0 && Fo.FolderExists(path.value))
        {
                StrOut = "<table border=0 width=100% cellspacing=0>"
                StrOut += "<tr bgcolor=\"#CCCCCC\"" +"><td width=20%><font class=find>路徑</font></td><td width=30%><font class=find>檔名</font></td><td width=25%><font class=find>檔案類型</font></td><td width=50%><font class=find>檔案大小</font></td></tr>";
                outPut.innerHTML = StrOut;
                FindFile(Fo.GetFolder(path.value));
                outPut.innerHTML = StrOut+"</table>";
        }
        else alert("錯誤的路徑...");
}
</script>

<BODY topmargin="0" leftmargin="0">

<table border=0 width=100% cellspacing="0" style="border-collapse: collapse" cellpadding="2"><tr>
        <td dir="ltr" bgcolor="#FFCC00"><b><font face="Arial" size="2">Named :</font></b></td>
        <td dir="ltr" bgcolor="#FFCC00">
    <input size=50 type=text id=search name=search class="Field" value="*.html"></td>
        </tr><tr>
        <td dir="ltr" bgcolor="#FFCC00">
    <p dir="ltr"><b><font face="Arial" size="2">Path : </font></b> </td>
        <td bgcolor="#FFCC00">
    <input size=50 type=text value="C:\testHtml" id=path name=path class="Field" ></td>
        </tr><tr>
        <td bgcolor="#FFCC00">要找的文字...</td>
        <td bgcolor="#FFCC00">
    <input size=50 type=text value="文字" id=path0 name=searchWord class="Field" ></td>
        </tr><tr>
        <td bgcolor="#FFCC00"> </td>
        <td bgcolor="#FFCC00">
    <input type=button value="        Scan          " onclick=Scan() class="Field"></td>
        </tr><tr>
        <td colspan=2 align=right bgcolor="#FFCC00"><font face=arial size=2><b>Search Result</b></font><hr></td>
        </tr><tr>
        <td colspan=2 bgcolor="#FFCC00">
                <div id=outPut>
               
                </div>
        </td>
        </tr></table>
</BODY>
</HTML>


飛行船大大 2008-06-20 12:18 PM

引用:

作者: cwvdavid (文章 1971160)
我做了一些修改, 已經可以查子目錄了, 也可以直接執行點選找到的檔案...

厲害 ~ 修改這樣快:on_79:
比我的p27.exe 好用多了. 我先去試 試.
謝謝 cwvdavid 大大

cwvdavid 2008-06-20 07:10 PM

它目前有1個 [極大] 的缺點,
就是沒找完之前, 不會出現結果...

(如果你是輸入C:\ .........
那就有得等了...)

飛行船大大 2008-06-21 12:14 PM

引用:

作者: cwvdavid (文章 1971443)
它目前有1個 [極大] 的缺點,
就是沒找完之前, 不會出現結果...

(如果你是輸入C:\ .........
那就有得等了...)

我試用後已經覺得很不錯了 , 也已經加到我的WEB 中.
我稍有修改畫面, 但是 可否幫我看看這3點 我不會改:
1. "就是沒找完之前, 不會出現結果..." 這一點 可否麻煩大大 當user按 Scan鈕之後 在按鈕旁邊顯示 一個字串 "搜尋中...請稍候" , 若找完後 就清除此字串即可.(這樣子就無缺點了)

2. 請多加一判斷:若找出的 path目錄名稱 的字串最右邊是 "_vti_pvt" 或 "_vti_cnf" 時
因為這是FrontPage 的虛擬目錄 和索引目錄 ( 如圖的最下方) ==>則此筆不列出 在螢幕
http://huhuge.hp.infoseek.co.jp/Pict3.gif

3.格行換底色問題 :我發覺 當找出許多筆時 顏色有時候不會換 (我指令不熟 不明原因)
如上圖的最下方2列.
語法:


                                        //如果有找到文字...就列出該檔案
                                        StrOut += "<tr "+ ((i%2)? "":"bgcolor=#ffffff")  +"><td width=70%><font class=find>" + FOo.Path + "</font></td><td width=30%><font class=find><a target=\"_blank\" href=\"" + mypath + FSo.item().name + "\">" + FSo.item().name + "</a></font></td><td width=20%><font class=find>"+ "</font></td></td></tr>";


cwvdavid 2008-06-24 02:58 AM

我大幅修改了程式碼, 可以在查詢中看到完全的狀況,
不會再感覺到[當(卡)在那邊]了...

你再試試看

語法:

<HTML lang=zh-TW>
<HEAD>
<TITLE>本機 檔案搜尋</TITLE>
<META http-equiv=Content-Type content="text/html; charset=big5">
</HEAD>
<style>
.Field {color: black; border: 1px solid #FFFFFF; background-color: #FFCC00;}
.Find  {color:blue; font: 12px Arial;}
</style>
<script>
var Fo = new ActiveXObject("Scripting.FileSystemObject");
var StrOut = new String();
var FileName = new String();
var Extention = new String();
var TableBarIndex = 0;
var cwvdavid_fileRead = new ActiveXObject("Scripting.FileSystemObject");
var SearchING = false;
var FindDirArray; //要搜尋的全部目錄資料...
var MissDirectory = ["_vti_", "images", "flash"]; //要忽略的目錄的開頭名稱(請寫小寫), 可自行再加入更多...
var myThreading_InterVal;

var commandList = [];
function executeCommands() { if(commandList.length>0) commandList.shift()(); }

function FindFile(FOo)
{
        FindDirArray = [];
        GetAllDirectory(FOo); //記錄所有要查詢的目錄...

        var FOo = Fo.GetFolder(FindDirArray.shift()); //一個目錄一個目錄的執行...
        simThread(FOo, null);
}

function GetAllDirectory(FOo)
{
        var SearchThisDirectory = true;

        var i;
        for(i = 0; i<MissDirectory.length; i++)
        {
                if(FOo.Name.toLowerCase().indexOf(MissDirectory[i]) == 0) //如果這個目錄 要忽略掉...就不記錄
                {
                        SearchThisDirectory = false;
                }
        }

        if(SearchThisDirectory)
        {
                FindDirArray.push(FOo.path);

                var subFOo = new Enumerator(FOo.SubFolders); //取得該目錄下的所有目錄...
                for( ; !subFOo.atEnd(); subFOo.moveNext())
                {
                        GetAllDirectory(Fo.GetFolder(subFOo.item().Path)); //使用遞迴.....來取得全部的目錄...
                }
        }
}

function simThread(FOo, FSo)
{
        if(FSo == null)
        {
                FSo = new Enumerator(FOo.Files);
        }

        if(!FSo.atEnd()) //還沒到最後一個[檔案]之前...
        {
                //路徑的尾巴要加\, 不然找不到
                mypath = FOo.Path;
                               
                //檢查mypath的尾巴是否有\, 如果沒有就加上去...
                if(mypath.lastIndexOf("\\")+1 != mypath.length)
                {
                        mypath = mypath + "\\";
                }

                window.status = "搜尋中... " + mypath + FSo.item().name; //把查詢過程顯示在IE的狀態列

                //檢查這個檔案的檔名...看有沒有符合...查詢的條件...
                if(FileName == "*" ||  FSo.item().name.slice(0,FSo.item().name.lastIndexOf(".")).toLowerCase().indexOf(FileName)>-1)
                {
                        if(Extention == "*" || FSo.item().name.slice(FSo.item().name.lastIndexOf(".")+1).toLowerCase().indexOf(Extention)>-1)
                        {
                                //把找到的檔案列出來...
                               
                                ts = cwvdavid_fileRead.OpenTextFile(mypath + FSo.item().name, 1);
                               
                                myReadWord = ts.ReadAll();
                                if(myReadWord.indexOf(searchWord.value) != -1)
                                {
                                        //如果有找到文字...就列出該檔案

                                        NewTR = Result_Table.insertRow(Result_Table.rows.length);
                                        NewTR.style.backgroundColor = ((TableBarIndex % 2)? "#FFFFFF":"#DDAA55");

                                        NewTD = NewTR.insertCell(0);
                                        NewTD.innerHTML = mypath;
                                        NewTD.className = "Find";

                                        NewTD = NewTR.insertCell(1);
                                        NewTD.innerHTML = "<a target=\"_blank\" href=\"" + mypath + FSo.item().name + "\">" + FSo.item().name + "</a>";
                                        NewTD.className = "Find";

                                        NewTD = NewTR.insertCell(2);
                                        NewTD.innerHTML = FSo.item().type;
                                        NewTD.className = "Find";

                                        NewTD = NewTR.insertCell(3);
                                        NewTD.innerHTML = String(FSo.item().size/(1024*1024)).slice(0,3) +" MB";
                                        NewTD.className = "Find";
                                        TableBarIndex++; //列出檔案時, 將變數加1, 以便換顏色...
                                }
                                ts.Close();
                        }
                }


                FSo.moveNext(); //移到下一個檔案...
                commandList.push(function(){simThread(FOo, FSo);});
        }
        else //找下一個目錄的資料...
        {
                if(FindDirArray.length>0)
                {
                        simThread(Fo.GetFolder(FindDirArray.shift()), null);
                }
                else
                {
                        alert("已搜尋完畢...");
                        mySearchBTN.value = "        開始搜尋        ";
                        SearchING = false;
                        clearInterval(myThreading_InterVal);
                }
        }
}

function Scan()
{
        if(SearchING)
        {
                clearInterval(myThreading_InterVal);

                mySearchBTN.value = "        開始搜尋        ";
                SearchING = false;
                alert("已中斷搜尋...");
        }
        else
        {
                myThreading_InterVal = setInterval("executeCommands()",1); //每一毫秒就執行一次...

                SearchING = true;
                mySearchBTN.value = "(搜尋中...) 立即停止搜尋";

                FileName = (search.value.lastIndexOf(".")>-1)? search.value.slice(0,search.value.lastIndexOf(".")):(search.value.length>0)? search.value.toLowerCase():"*"; //Get Searched File Name
                Extention = (search.value.lastIndexOf(".")>-1)? search.value.slice(search.value.lastIndexOf(".")+1).toLowerCase():"*"; // Get Searched File Extention Name

                TableBarIndex = 0;

                if(path.value.length>0 && Fo.FolderExists(path.value))
                {
                        tableRows = Result_Table.rows.length;
                        for(i=1; i<tableRows; i++) Result_Table.deleteRow(1); //保留標題列, 其他結果清除...


                        FindFile(Fo.GetFolder(path.value));
                }
                else
                {
                        alert("錯誤的路徑...");
                }
        }
}
</script>

<BODY topmargin="0" leftmargin="0">

<table border=0 width=100% cellspacing="0" style="border-collapse: collapse" cellpadding="2"><tr>
        <td dir="ltr" bgcolor="#FFCC00"><b><font face="Arial" size="2">Named :</font></b></td>
        <td dir="ltr" bgcolor="#FFCC00">
    <input size=50 type=text id=search name=search class="Field" value="*.html"></td>
        </tr><tr>
        <td dir="ltr" bgcolor="#FFCC00">
    <p dir="ltr"><b><font face="Arial" size="2">Path : </font></b> </td>
        <td bgcolor="#FFCC00">
    <input size=50 type=text value="D:\" id=path name=path class="Field" ></td>
        </tr><tr>
        <td bgcolor="#FFCC00">要找的文字...</td>
        <td bgcolor="#FFCC00">
    <input size=50 type=text value="文字" id=path0 name=searchWord class="Field" ></td>
        </tr><tr>
        <td bgcolor="#FFCC00"> </td>
        <td bgcolor="#FFCC00">
    <input type=button id=mySearchBTN value="        開始搜尋        " onclick=Scan() class="Field"></td>
        </tr><tr>
        <td colspan=2 align=right bgcolor="#FFCC00"><font face=arial size=2><b>Search Result</b></font><hr></td>
        </tr><tr>
        <td colspan=2 bgcolor="#FFCC00">
                <div id=outPut>
                        <table border=0 width=100% cellspacing=0 id="Result_Table">
                        <tr id="ResultTR1" bgcolor=\"#CCCCCC\"" +"><td class=find width=20%>路徑</td><td class=find width=30%>檔名</td><td class=find width=25%>檔案類型</td><td class=find width=50%>檔案大小</td></tr>
                        </table>
                </div>
        </td>
        </tr></table>
</BODY>
</HTML>


(呼...寫這種程式會爆肝.....
以後要少碰......)

飛行船大大 2008-06-26 11:54 AM

引用:

作者: cwvdavid (文章 1974195)
我大幅修改了程式碼, 可以在查詢中看到完全的狀況,
不會再感覺到[當(卡)在那邊]了...

你再試試看

(呼...寫這種程式會爆肝.....
以後要少碰......)

哈哈 不會爆肝的啦 ...只會越來越聰明 而且這裏帖子不多我們這一帖就像置頂 你在論壇會越來越出名..出名..出名..(ECHO...ECHO...ECHO...)
並且 "程式語言討論區 " 若是越沒人氣...以後會越走下坡沒人來 . ccc...我倆這樣也算是有供獻.

謝謝你花時間 幫我修改 程序也越來越完善了.

我填搜尋條件都和上次一樣 也 原來的目錄~ 若去除那些虛擬目錄的檔 應該至少還會有100 項要列出在螢幕
但是新改版的(16樓) 反而都搜尋不到只是列出3筆( 如下圖)...會不會是過濾太嚴格 ??
(14樓 的源碼 則都有列出 約100筆 是正確的)
http://huhuge.hp.infoseek.co.jp/Pict4.gif

從2天前 我忙一套發送簡訊系統 (驗收期15天) ~ 現在才測試cwvdavid大大新改的.這支程式不急用 我晚上再自己 修看看.
如果你有時間願意多幫忙改 ,更歡迎.....(ECHO...ECHO...ECHO...)

'--------------------------------
題外話~
有時覺得程式設計 當某一段時間趕進度 和解決一些目標時 孤軍作戰
我經常都是 傍晚或深夜很安靜寫 ~雖然一邊撥著mp3音樂檔. 有時還是覺得滿單調 乏味的 ~
哈哈..或許是職業倦勤ㄅ 也或許太久沒有出門玩它個幾天幾夜.
不知道 其他的程式設計師 會不會有時也同感.

cwvdavid 2008-06-26 04:59 PM

我測試時沒有這個問題,
有可能是var MissDirectory = ["_vti_", "images", "flash"]; //要忽略的目錄的開頭名稱
造成你的其他資料夾被mark掉...

我有想過很多做法,
包含...

1. 把Table加上捲軸, 固定標題, 以及顯示總檔案數,
2. 查詢時, 將符合的檔案路徑暫存, 只要路徑檔名不變, 在2次查詢時, 速度會更快
3. 動態提示使用者要[同意]啟用ActiveX, 如果不小心按了取消, 就重新載入...
...
不過, 想一想還是有空再慢慢玩即可...暫時不會再改了,
你有測到Bug的話再跟我說(目前已知的Bug是查詢完之後, IE的狀態列不會清掉......)


所有時間均為台北時間。現在的時間是 06:12 AM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1