• ベストアンサー

情報取り込み

フォルダーにあるファイル名、ファイルサイズ、ファイルの最終更新日時の情報を取り込みたいのですが、うまくいきません。ルートフォルダを指定してサブフォルダーも含めてやろうとしているのですが・・・。ファイル名は取り込めました。サイズはSizeプロパティーを最終更新日時はDateLastModifiedを使えばいいと思います。フォルダオブジェクトとファイルオブジェクトの関連付けが難しいです。教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.5

何か「前途多難」の様相ですが.... 問題を切り分けて考えて下さい。 >ルートフォルダを指定してサブフォルダーも含めてやろうとしているのですが・・・ ASPに関係なく、この件を理解されているのか。 それと、ASPへの実装方法です。 参考URLは再三提示しているコードをExcelVBAで実現させているものです。Excelをお持ちならURLの2つ目のコード表示の下にあるリンクからダウンロードさせて動作を見て下さい。 参照設定を用いていますから、ASPではCreateObjectに書き換える必要がありますが、まず、再帰処理を理解されないと配下のフォルダを含める処理が実現しません。 この点では、ASPに直接インラインで記述するより、 別プロシージャとして書き出すことでVBSやVBAで動作確認ができるので現状打破につながると思います。 >ASPでSubプロシージャを使えるんですか? 使えますよ。下記参考URLから「ASP関連」に入ると、 インクルードでSubプロシージャを書いているサンプルが あります。 元々、Callで呼び出したり、戻り値を受けない呼び出し方なら、 Functionで書いても何も替わりません。 後、気になるのは、 > <%= list %> ですが、この方法だと、 文字列変数となるlistは「改行(<br>)」などを含めて、 全ての編集をしていないければなりません。

その他の回答 (4)

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.4

> ASPで書いているんですが... サーバサイドで良いですね? ならば、こんな感じです。 (直接書いているので誤植あるかも知れません。) わざと関数化しておくと、切り出してVBSやExcelなどで 動作確認ができますから、いきなりASPベースで動かさなくても 開発ができますよ。 <% Sub ROOT_FOLDER(prmFolderName) Dim objFSO, objPATH Set objFSO = Server.CreateObject("Scripting.FileSystemObject") ' ルートフォルダから探索開始 Set objPATH = objFSO.GetFolder(prmFolderName) Call SEARCH_FOLDER(objPATH) End Sub Private Sub SEARCH_FOLDER(ByVal objPATH) Dim objPATH2, objFILE ' 現在フォルダをテーブルに表示 Response.Write "[" & objPATH.Name & "]<br>" & vbCrLf ' 先ずサブフォルダを探索する For Each objPATH2 In objPATH.SubFolders ' 再帰呼び出し Call SEARCH_FOLDER(objPATH2) Next ' 本フォルダの各ファイルをシート上に表示 For Each objFILE In objPATH.Files With objFILE Response.Write "&nbsp;&nbsp;" & .Name & _ " (" & .DateLastModified & " " & _ FormatNumber(.Size) & "Bytes)" & vbCrLf End With Next End Sub %> ・ ・ ・ <body> <p> <% Call ROOT_FOLDER("C:\TEMP") %> </p></body></html> >どのようにファイルサイズを更新日を適応したらいいですか? 「.DateLastModified」が最終更新日、 「.Size」がファイルサイズです。

eccschool
質問者

補足

ASPで書いているんですが 関数をまとめたファイルA(エラー呼び出し等)で Function getFileList(prmFolderName) Dim list, objFolder getFileList = "" list = "" Set objFolder = fso.GetFolder(prmFolderName) For Each objFolder In objFolder.SubFolders list = list & getFileList(objFolder) Next Set objFolder = fso.GetFolder(prmFolderName) For Each objFile In objFolder.Files list = list & Replace(objFile.Path, "\", "/") & "<br>" & vbCrLf Next Set objFolder = Nothing getFileList = list End Function これをインクルードして 別のファイルBで <% root = Request("root") dir = Server.MapPath(root) Call debug("root", root) Call debug("dir", dir) '------------------------------------------------' 入力チェック '------------------------------------------------- If Trim(root) = "" Then setErrMsg("ルートフォルダを指定して下さい。") End If If fso.FolderExists(dir) = False Then setErrMsg("指定されたフォルダは存在しません。") End If If countErrMsg = 0 Then Set objFolder = fso.GetFolder(dir) list = list & getFileList(objFolder.Path) Set objFolder = Nothing End If %> <html> ・ ・ <body> <%= list %> </body> </html> これに教えてもらった内容を組み込むことは出来ませんか? ASPでSub プロシージャを使えるんですか? サーバー内のファイルの調査(改ざんの可能性)をしたいんです。 2つのフォルダーを比較して・・・ということまで考えています。先は長いです・・・。

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.3

下記はExcelVBAの例です。 '---------------------------------------------------------- ' [参照設定]Microsoft Scripting Runtime Option Explicit Sub ROOT_FOLDER() Dim objFSO As FileSystemObject Dim objPATH As Folder Dim myObj As Object Dim strPATHNAME As String ' ルートとなるフォルダの指定 Set myObj = CreateObject("Shell.Application"). _ BrowseForFolder(0, "フォルダを選択してください", 0) If myObj Is Nothing Then Exit Sub strPATHNAME = myObj.Self.Path Set objFSO = New FileSystemObject ' ルートフォルダから探索開始 Set objPATH = objFSO.GetFolder(strPATHNAME) Call SEARCH_FOLDER(objPATH, 0, 0) End Sub Private Sub SEARCH_FOLDER(ByVal objPATH As Folder, _ ByRef GYO As Long, _ ByVal COL As Long) Dim objPATH2 As Folder Dim objFILE As File ' 現在フォルダをシート上に表示 GYO = GYO + 1 COL = COL + 1 Cells(GYO, COL).Value = "[" & objPATH.Name & "]" ' 先ずサブフォルダを探索する For Each objPATH2 In objPATH.SubFolders ' 再帰呼び出し Call SEARCH_FOLDER(objPATH2, GYO, COL) Next objPATH2 ' 本フォルダの各ファイルをシート上に表示 COL = COL + 1 For Each objFILE In objPATH.Files GYO = GYO + 1 With objFILE Cells(GYO, COL).Value = .Name & _ " (" & .DateLastModified & " " & _ Format(.Size, "#,##0") & "Bytes)" End With Next objFILE End Sub '----------------------------------------------------------

eccschool
質問者

補足

ASPで書いているんですが Function getFileList(prmFolderName) Dim list, objFolder getFileList = "" list = "" Set objFolder = fso.GetFolder(prmFolderName) For Each objFolder In objFolder.SubFolders list = list & getFileList(objFolder) Next Set objFolder = fso.GetFolder(prmFolderName) For Each objFile In objFolder.Files list = list & Replace(objFile.Path, "\", "/") & "<br>" & vbCrLf Next Set objFolder = Nothing getFileList = list End Function これをインクルードして <% root = Request("root") dir = Server.MapPath(root) Call debug("root", root) Call debug("dir", dir) '-------------------------------------------------' 入力チェック '------------------------------------------------- If Trim(root) = "" Then setErrMsg("ルートフォルダを指定して下さい。") End If If fso.FolderExists(dir) = False Then setErrMsg("指定されたフォルダは存在しません。") End If If countErrMsg = 0 Then Set objFolder = fso.GetFolder(dir) list = list & getFileList(objFolder.Path) Set objFolder = Nothing End If どのようにファイルサイズを更新日を適応したらいいですか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

指定したフォルダの中のファイルの操作については、 http://okweb.jp/kotaeru.php3?qid=1409562 フォルダの中のフォルダの操作については、 http://okweb.jp/kotaeru.php3?qid=1168075 が参考になるかも

回答No.1

お世話になります。 これは参考になりますか? http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/as_k03.htm

関連するQ&A