株式会社スキャン
<%
説明: アプリケーションクラスを書くのは初めてです。不適切な点があれば教えてください。 QQ: 1168064
'プロパティとメソッド
'1. ScanType: スキャンの種類。デフォルト値: 1。値: 0 はファイルとデータベースをスキャンします。 1 はファイルをスキャンします。 2 はデータベースをスキャンします。
'2. Conn、Table、ColImg、ColID: データベースをスキャンするときに使用され、それぞれ接続文字列、テーブル名、ピクチャ列名、ピクチャに対応する ID 列名です。
'3. リスト: 表示タイプ。デフォルト値: 0。値: 0 無効な画像 1 ネットワーク画像 2 有効な画像 3 すべて
'4. ScanText: スキャンされた画像の種類。デフォルト値: Asp/html/htm。値: 「/」で区切られたファイル拡張子。
'5. パス: スキャンされたパス: デフォルトは Web サイトのルート ディレクトリです。相対パスを使用してください。たとえば、「/dsj」
'6. Scan():メソッド。設定に従ってスキャンする
'7. ファイル: スキャンしたすべての情報を保存します。 Scan() メソッドの後に呼び出されます
'8. フォルダー: スキャンされたフォルダーの数
'9. ファイル: スキャンされたファイルの数。
'10. TotalSize: ディレクトリの合計サイズ。 G、M、Bが自動表示されます。
'11. 画像: スキャンされたファイル内の写真の数
'12 存在: 失敗の数
'13. DbImg: データベース内の写真の数
'14. TotalImg: スキャンした写真の数
'15. 実行時間: スキャンプロセスの時間。単位はミリ秒
'16. ファイルの使用について:
' ObjName.file の各 Fn について……次へ
'Fn.FileName: パスを含む画像名
' Fn.Belong: 画像が存在するファイルまたはデータベース (ファイルは「|」で区切られます)
'Fn.Exists: 有効かどうか。 0 は無効、1 は有効、1 はローカルパスではないことを意味し、判定できません。
明示的なオプション
ClassMCScanImg
dim ファイル、ScanType、Conn、Table、ColId、ColImg、FSO、Path、List、ScanText、Spath、Version
dim フォルダー、ファイル、TotalSize、画像、存在、sFiles、Start、EndT、RunTime、DbImg、TotalImg、フィルター
プライベートサブクラス_初期化
Set File = Server.Createobject("Scripting.Dictionary")
Set FSO = CreateObject("Scripting.FileSystemObject")
スキャンタイプ=1
コン「」
テーブル = "
ColImg=""
ColId=""
パス="/"
sPath = Server.MapPath("/")
リスト=0
ScanText="asp/htm/html"
フォルダ=0
ファイル=0
合計サイズ=0
画像=0
DbImg=0
存在する=0
sファイル=0
合計画像=0
スタート=タイマー
Endt=タイマー
ランタイム=0
フィルター = "src=(.[^>^&]*)(.gif|.jpg)"
バージョン = "1.00"
End Sub
Private Sub Class_Terminate
ファイル=なしを設定します
FSO = なしを設定します
End Sub
Public Function Scan() 'スキャン開始
left(path,1)="/" の場合
path=Spath&Replace(パス,"/","")
それ以外
Path=Spath&""&Replace(パス,"/","")
終了する場合
ScanType=1 の場合、
スキャンファイル(パス)
ElseIf ScanType=2 then
ScanDb()
それ以外
スキャンファイル(パス)
ScanDb()
終了の場合
EndT=タイマー
実行時間=フォーマット番号(終了T-開始)*1000
合計サイズ=shb(合計サイズ)
TotalImg=DbImg+画像
End Function
Private Sub ScanDB() 'データベースをスキャンします。ここのパスは判断が難しいため、InsDb で変更してください (If AddNum=0 の後)
ディム Rs、RetStr、ReBel、SQL
SQL="「&Table&」から「&ColID&」、「&ColIMG&」を選択「&ColID&」DESCで並べ替えます"
'エラー時は次へ再開
Conn ="" OR Table="" OR ColID="" OR ColIMG = "" の場合
出口サブ
それ以外
Set Rs = Server.CreateObject("ADODB.RecordSet")
Rs.Open SQL,conn,3,3
ただしRs.EOFではない
RetStr=Rs(1)
テーブル「&Table&」の ReBel="&ColImg&" 列 (ID: "&Rs(0)&")"
InsDb RetStr,ReBel,0,""
Rs.ムーブネクスト
ウェン
Rs.Close
Rs=何も設定しない
終了の場合
End Sub
Private Sub ScanFile(PathStr) 'ファイルをスキャンします。再帰
ディム f,ff,fn,fd,fdn,RealPath,fr,fc
'Response.write PathStr&"<br>"
ff = fso.getfolder(pathstr) を設定します。
f = ff.files を設定します
fd = ff.subfolders を設定します
f.Count >0 の場合
各 fn in f について
ファイル=ファイル+1
TotalSize=TotalSize+fn.Size
If ChkFileName(fn.Name) then
sファイル=sファイル+1
右の場合(PathStr,1) <> "" then
RealPath=PathStr&""&fn.Name
それ以外
RealPath=PathStr&fn.Name
終了の場合
セット fr = FSO.OpenTextFile(RealPath,1)
fc=fr.ReadAll
'response.write RealPath&"<br>"
RegExpTest フィルター、fc、RealPath
終了の場合
次
End
If fd.Count> 0 then
fd 内の各 fdn について
フォルダ=フォルダ+1
薄暗い温度
正しい場合 (PathStr,1) <> "" then
temp=PathStr&""&fdn.Name
それ以外
temp=PathStr&fdn.Name
終了する場合
スキャンファイル(一時)
次
終了の場合
End Sub
Private Sub RegExpTest(Patrn, Strng,PathStr) '画像の検索
Dim RegEx、一致、一致、Chk、ReImg、RetStr、ReBel、TheFile
RegEx = 新しい RegEx を設定します
RegEx.Pattern = パターン
RegEx.IgnoreCase = True
RegEx.Global = True
一致を設定 = RegEx.Execute(Strng)
試合中の各試合について
RetStr = Replace(Match.Value,"src=","")
RetStr = Replace(RetStr,"'","")
RetStr = Replace(RetStr,"""","")
チェック = 0
ReBel=GetFn(PathStr)
InsDb RetStr,ReBel,1,PathStr
次
End Sub
Private Function GetExt(FullPath) 'スキャンされたファイル タイプであるかどうかを判断するために使用されるファイル拡張子を取得します。
薄暗い温度
フルパス <> "" の場合
Temp = Mid(フルパス,InStrRev(フルパス, "")+1)
InStr(Temp,".")>0 の場合
GetExt=Mid(Temp,InStrRev(Temp, ".")+1)
それ以外
GetExt=温度
終了の場合
それ以外
GetExt = ""
終了の場合
End Function
Private Function ChkFileName(Str) 'ファイルがスキャン対象のファイル形式であるかどうかを検出します
ディム ar、i、fn
fn=GetExt(str)
ar=Split(ScanText,"/")
ChkFileName=False
i=0 の場合 ubound(ar) へ
lCase(fn) =lCase(Trim(ar(i))) の場合
ChkFileName=True
終了関数
終了の場合
次
End Function
Private Function shb(n) 'バイト数を表示
n<1024 の場合
shb = n&"バイト"
ElseIf n>1024 かつ n<1024*1024 then
shb = フォーマット番号(n/1024,2)&"K"
ElseIf n>=1024*1024 かつ n <1024*1024*1024 then
shb = フォーマット番号(n/(1024*1024),2)&"M"
それ以外
shb =フォーマット番号(n/(1024*1024*1024),2)&"G"
終了の場合
End Function
Private Sub InsDb(RetStr,ReBel,AddNum,PathStr) '画像が有効かどうかを解析し、辞書オブジェクトに追加します
dim chk、ReImg、TheFile
InStr(RetStr," http://")>0または Instr(RetStr," ftp://")>0の場合
ReImg=RetStr
チェック=-1
それ以外
RetStr = Replace(RetStr,"/","")
If (Left(RetStr,1) = "" ) then
RetStr=SPath&Retstr
ElseIf Left(RetStr,3) = ".." then
薄暗い温度
temp=GetPath(PathStr)
Do until Left(RetStr,3) <> ".." '相対パスを処理します
Temp=Fso.GetParentFolderName(Temp)
RetStr=Mid(RetStr,4,len(RetStr)-3)
ループ
RetStr=Temp&""&RetStr
それ以外
AddNum=0 の場合
left(RetStr,1)="" の場合
RetStr=パス&""&Retstr
それ以外
RetStr=パス&Retstr
終了の場合
それ以外
RetStr=getpath(Pathstr)&RetStr
終了IF
End If
FSO.FileExists(RetStr) then
チェック=1
終了の場合
ReImg=GetFn(RetStr)
終了の場合
Chk=0 の場合
存在する=存在する+1
次の場合に終了
File.Exists(ReImg) の場合
TheFile=File.Item(ReImg) を設定します。
If TheFile.Belong <> ReBel then
TheFile.Belong=TheFile.Belong&"|"&Rebel
終了の場合
それ以外
(List=0 AND Chk =0) または (List=1 および Chk=-1) または (List=2 および Chk=1 ) または List=3 の場合
TheFile= 新しいファイル情報を設定します
TheFile.FileName=ReImg
TheFile.Belong=反逆者
TheFile.Exists=チェック
File.Add ReImg,TheFile
ケースのスキャンタイプを選択してください
ケース 1 画像=画像+1
ケース 2 DbImg = DbImg+1
それ以外の場合
AddNum = 0 の場合
DbImg = DbImg+1
それ以外
画像=画像+1
終了の場合
エンドセレクト
終了の場合
終了の場合
End Sub
Private Function GetPath(Str) 'ファイルパスを取得
'response.write str&"<br>"
薄暗い温度、エンドdB
Temp=Replace(Str,"/","")
EndB=InstrRev(Temp,"")
EndB = 0 の場合
GetPath=SPath
それ以外
GetPath=Left(Temp,EndB)
終了の場合
'response.write GetPath&"<BR>"
End Function
Private Function GetFn(Str) 'ファイルの相対パス名を取得
薄暗い温度
温度=強度
'response.write temp&"<br>"
Temp=Replace(Str,SPath,"")
Temp=Replace(Temp,"","/")
GetFn=温度
End Function
End Class
Class FileInfo
Dim FileName,Belong,Exists
Private Sub Class_Initialize
ファイル名=""
所属「」
存在します=""
エンドサブ
エンドクラス
%>
応用例
< %@LANGUAGE="VBSCRIPT " CODEPAGE="936"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd ">
<%
%>
<html>
<頭>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>無題のドキュメント</title>
<リンク rel="スタイルシート" href="css.css">
</head>
<body>
<form name="form1" method="post" action="scan.asp">
<table width="60%" border="0" align="center" cellpacing="1" bgcolor="#003366">
<tr bgcolor="#FFFFFF">
<td height="30" colspan="2" bgcolor="#00CCFF"><div align="center">画像のスキャン</div></td>
</tr>
<tr bgcolor="#FFFFFF">
<td width="26%" height="20"><div align="right">スキャン フォルダー:</div></td>
<td width="74%" height="20"><select name="パス" id="パス">
<オプション値="/">/</オプション>
<%
薄暗い fso、f、fd、p
p=サーバー.MapPath("/")
set fso=Server.CreateObject("Scripting.FileSystemObject")
関数 showpath(str)
set f=fso.getfolder(str)
set fd=f.subfolders
fd 内の各 fd に対して
Response.Write "<option value="&Replace(Replace(fds,p,""),"","/")&">"&Replace(Replace(fds,p,""),""," /")&"</option>"
set ff=fso.getfolder(fds)
ffd=ff.サブフォルダーを設定します
ffd.count>0 の場合
ショーパス(FDS)
終了する場合
次
終了関数
showpath(p)%>
</select></td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="20"><div align="right">スキャン タイプ: </div></td>
<td height="20"><input type="radio" name="SType" value="0">
全て
<input name="SType" type="radio" value="1" チェック済み>
ファイルをスキャンする
<input type="radio" name="SType" value="2">
データベースをスキャン</td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="20"><div align="right">表示タイプ:</div></td>
<td height="20"><入力名="LType" タイプ="ラジオ" 値="0" チェック済み>
無効
<input type="radio" name="LType" value="1">
ネットワークパス
<input type="radio" name="LType" value="2">
効率的
<input type="radio" name="LType" value="3">
すべて</td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="20"><div align="right">ファイルの種類: </div></td>
<td height="20"><input name="Ext" type="checkbox" id="Ext" value="asp" チェック済み>
アスプ
<input name="Ext" type="checkbox" id="Ext" value="htm" チェック済み>
HTML
<input name="Ext" type="checkbox" id="Ext" value="html" チェック済み>
HTML
<input name="Ext" type="checkbox" id="Ext" value="inc" チェック済み>
株式会社</td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="20"><div align="right">データベース:</div></td>
<td height="20">表:
<input name="Tab" type="text" id="Tab" size="5" class="allinput">
画像ID列:
<input name="ColID" type="text" id="ColID" size="5" class="allinput">
画像パス列:
<input name="ColImg" type="text" id="ColImg" size="5" class="allinput"> </td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="40"colspan="2"><div align="center">
<input type="submit" value="スキャンの開始" class="allinput">
</div></td>
</tr>
</テーブル>
</form>
</body>
</html>
スキャン.asp
<!--#include file="scan.inc"-->
<%
ディム MCS、FN、FB
%>
<link href="css.css" rel="stylesheet">
<table width="70%" border="0" align="center" cellpadding="5" cellpacing="1" bgcolor="#003366">
<tr bgcolor="#AAAAFF">
<td width="30%" height="30">画像名</td>
<td width="39%" height="30">場所</td>
<td width="31%" height="30">有効</td>
</tr>
<%
関数 GetVar(ID,デフォルト)
GetVar = デフォルト
If Request(ID) <> "" then
GetVar = リクエスト(ID)
終了IF
終了機能
Dim SType、LType、Path、Ext、Conn、Tab、ColID、ColImg
SType=GetVar("SType",1)
LType=GetVar("LType",3)
Path=GetVar("パス","/")
Ext = Trim(Replace(GetVar("Ext","htm,html,asp,inc"),", ","/"))
Conn=GetVar("Conn","")
Tab=GetVar("タブ","")
ColID=GetVar("ColID","")
ColImg=GetVar("ColImg","")
Conn="Provider=Microsoft.Jet.OLEDB.4.0;データ ソース="&Server.MapPath("/db1.mdb")
set mcs= 新しい mcscanimg
mcs.ScanType=SType
mcs.list=LType
mcs.ScanText=Ext
mcs.conn=コン
mcs.Path=パス
mcs.table=タブ
mcs.ColID=ColID
mcs.ColImg=ColImg
mcs.scan()
mcs.file 内の各 fn について
set fb=mcs.file(fn)
%>
<tr bgcolor="#FFFFFF">
<td valign="top"><%=fb.filename%></td>
<td><%=Replace(fb.Belong,"|","<br>")%></td>
<td><%
fb.Exists=1 の場合
応答。「有効なパス」を書き込みます
elseif fb.exists=0 then
応答。「無効なパス」と書き込みます
それ以外
応答。「非ローカルパス」を書き込みます
終了する場合
%></td>
</tr>
<%
次
%>
<tr bgcolor="#FFFFFF">
<td colspan="3">スキャンされたファイルの合計: <%=mcs.files%>; スキャンされたフォルダー: <%=mcs.folders%>; 合計サイズ: <%=mcs.totalsize%><br>スキャンされた画像の数: <%=mcs.images&"; データベース イメージの数: "&mcs.dbimg&"; イメージの総数: "&mcs.TotalImg%>; 失敗の数: <%=mcs.exists%><br>実行時間: <%=mcs.runtime%>ミリ秒</td>
</tr>
</テーブル>
<%set mcs=nothing%>