• ベストアンサー

VBでのファイル検索(API以外で)

誰か教えていただければうれしいです VBでファイル検索をしたいのですが まず利用可能なドライブを取得して ドライブごとに検索してファイルがあれば その絶対パスとファイルのあったドライブ名を グローバル変数に格納したいのですが API関数を使わない方法がわかりません わかるかたがいらっしゃれば教えていただけないでしょうか

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 自作ですが。 この例では、ファイル名をフルパスで返しますので、ドライブ名が欲しかったら、切り出して下さい。 また、この例では、あるフォルダ内の下部階層まで検索します。したがって、フォルダにドライブ名(a:\など)を指定してやればドライブごとに検索出来ます。 また、この例では、隠しファイルなど特殊な属性のファイルは検索出来ませんので、必要に応じてDIR関数の第2引数をいじって下さい。 では。 ***** 標準モジュールに ***** 'SearchFol内の全ファイルを対象にSearchFileを探し、あればフルパスで返す Public Function AllDirSearchFile(SearchFol As String, searchFile As String, Optional searchMode As Integer = vbBinaryCompare) As String   Dim sf As String 'パスなしのSearchFile   Dim setPath As String '現在のパス   Dim checkName As String '調べるファイル(フォルダ)   Dim checkFlag As Boolean '繰り返しの終了判定   Dim pathCount As Integer '処理するパスの個数   Dim pathList() As String 'パス名のリスト      AllDirSearchFile = ""      sf = MakeFileName(searchFile)      If (GetAttr(SearchFol) And vbDirectory) <> 0 Then     If Right(SearchFol, 1) <> "\" Then       SearchFol = SearchFol & "\"     End If          pathCount = 0     setPath = SearchFol     checkFlag = True     Do While checkFlag = True       checkName = Dir(setPath & "*.*", vbDirectory)       Do While checkName <> ""         If checkName <> "." And checkName <> ".." Then           If (GetAttr(setPath & checkName) And vbDirectory) <> 0 Then             pathCount = pathCount + 1             ReDim Preserve pathList(pathCount)             pathList(pathCount) = setPath & checkName           Else             If StrComp(checkName, sf, searchMode) = 0 Then               AllDirSearchFile = setPath & checkName               Exit Function             End If           End If         End If         checkName = Dir()       Loop       If pathCount = 0 Then         checkFlag = False       Else         setPath = pathList(pathCount) & "\"         pathCount = pathCount - 1       End If     Loop   Else     If StrComp(MakeFileName(SearchFol), sf, searchMode) = 0 Then       AllDirSearchFile = SearchFol     End If   End If    End Function ' フルパスからファイル名を取り出す Public Function MakeFileName(fileName As String) As String   Dim z0 As Long      z0 = InStrRev(fileName, "\")   If z0 <> 0 Then     MakeFileName = Mid(fileName, z0 + 1)   Else     MakeFileName = fileName   End If    End Function

jk_beck
質問者

お礼

ありがとうございました 試してみますね!

関連するQ&A

  • VBでのAPI

    いつもお世話になっています。 今回初めて、APIを使うVBのプログラミングをしているんですが、サーバからのファイル名取得でつまずいています。 long型変数 = FtpFindFirstFile(セッション番号, ディレクトリパス, str型変数, 0, 0) って感じで、何かしらファイルが存在するかどうかは戻り値で判定できるのですが、ファイル名自体が取得できません。(複数ファイルが存在するときは、どれか一つのファイル名が取得できれば問題ないです) いろんなサイトを調べたのですが、「引数の文字列変数に"情報"が取得される」ようなふうに書かれており、はっきりしません。ちなみに私の作成中のPGでは、引数の文字列変数は何も格納なれない状態です。 どなたか詳しい方、教えてくれませんか?

  • API関数(DLL)の呼び出しにおいて、DLLの格納場所は?

    お世話になります。 VB.NETでAPI関数を呼び出す場合にまず、API関数を格納しているDLLを宣言しなけれならないと下記URLにあります。 (http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html) (a)DllImport属性を利用する方法 <System.Runtime.InteropServices.DllImport("DLL名")> _ Function API関数名(仮引数) End Function (b)Declareステートメントを利用する方法 Declare Function API関数名 Lib "DLL名" (仮引数) そこで、質問なのですが、(a)、(b)どちらの方法で実現する場合においても、DLLの格納場所はC:\Windows\System32でないといけないのでしょうか?(実際にコーディングしてもSystem32フォルダにないとエラーになってしまいます。) 任意のフォルダにDLLを格納し、そこを参照できるようにできるのでしょうか? また、一般常識としてDLLはSystem32フォルダに格納しておかないといけないものなのでしょうか? 以上、よろしくお願いいたします。

  • VB教えてくださいm(__)m

    VBでプログラミングしてるのですが、ある変数”A”には(パス+ファイル名)が入っているのですが、この中からファイル名だけを取得するにはどうすればよいのでしょうか? (d:\aaa\bbb\ccc\ddd.txt → ddd.txt)

  • ファイルアップロード時にファイル名の絶対パスを取得を教えてください

    ファイルアップロード時にクライアント側のファイル名の絶対パスを取得する方法を教えてください。 $_FILESには絶対パスでなくファイル名だけしか入っていないのですがこの変数からは取得できないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • VB6.0のレジストリ情報取得方法

    VB6でレジストリの情報取得について、質問いたします。 VBにて、レジストリのセクション名を取得(検索して存在するなら真の値を返すだけでもよい)したいのですが、APIとか関数はあるのでしょうかまたは、出来るのでしょうか?調べた限り見つからない・・・・(-_-; 宜しくお願いします。

  • VB.NET DLL【API関数(コールバック関数)】の呼び出し方法について

    目的は下記(3)のAPI関数をVB.NETで呼び出したいのですが、そこにいきつくまでにいろいろと壁にぶちあたっております。 (1)API関数をVB.NETから利用するにあたって どのような手順および調査・学習すればVB.NETからWin32 APIを独力で呼び出せるようになるのでしょうか?ネット上に情報が乏しく、いきずまっております。 (2)API関数の調査方法、またコールバック関数について 下記(a),(b)のようにWin32 API関数を宣言して、あとは呼び出し側の関数で(a),(b)で宣言したAPI関数を記述するだけで基本的には使用できるようになるという大まかなイメージはつかめております。 このあとでAPI関数をMSDNで調べると引数がHWNDやPCTSTRなど見慣れないものが出てきて、次のURL(http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html)を見ると、APIの型とVB.NETの型は違うので型変換をしなければならないとあります。またさらに私が呼び出したい関数はコールバック関数なるものでこれまた?な状態です。 そこでAPIとVB.NETの型変換の調査方法およびコールバック関数の利用方法などを教えていただけないでしょうか? (a)DllImport属性を利用する方法 <System.Runtime.InteropServices.DllImport("DLL名")> _ Function API関数名(仮引数) End Function (b)Declareステートメントを利用する方法 Declare Function API関数名 Lib "DLL名" (仮引数) (3)InstallHinfSection関数(http://msdn2.microsoft.com/en-us/library/aa376957.aspx)について 下記のコードを実行したのですが、実行時エラーにはならないのですが、APIの関数が動作してくれません。どこが悪いのかがまったく見当がつかないのですがどなたかアドバイスいただけると助かります。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click InstallHinfSection(Nothing, Nothing, "DefaultInstall 132 C:\INF_TEST\Original.inf", 0) End Sub   Declare Function InstallHinfSection Lib "setupapi" Alias "InstallHinfSection" (ByVal hwnd As String, ByVal ModuleHandle As String, ByVal CmdLineBuffer As String, ByVal nCmdShow As Integer) As Long APIが難しすぎていろいろとおかしなことを書いているかもしれませんが、どうぞよろしくお願いいたします。

  • VBとAPI のからませかた?

    VBをはじめて2週間位になりましたが、  疑問が沸いてきました。 "API"です。 これの使用方法についてわかりやすく解説してくださっているHPを知っておられる方、ぜひ教えてください。 ちなみに どんな機能を使いたいか、  ・音楽再生  ・システム表示  メモリ情報 ユーザー名 など。

  • 実行ファイルの検索順の謎

    前々から不思議に思っていたWindowsの素朴な疑問です。 コマンドプロンプトに実行ファイル名を入れると、カレントフォルダ検索後、PATH環境変数のフォルダを順に検索し、最初に見つかった実行ファイルが起動されます。 ところが、CreateProcess API に実行ファイル名を与えると、PATH環境変数で検索する前に Windows や System32 フォルダが検索されます。 時々これが現場で事故の原因になることがあるのですが、 何故こんな違いがあるのでしょうか? 理由をご存知の方がおられましたらよろしくお願いいたします。

  • APIについて

    アプリケーションソフトがが環境変数の値を取得する場合、環境変数を取得するAPI関数が「あそこのレジストリに要求された変数があるから取りに行いこう」という感じでとりに行って、アプリケーションに返してるんでしょうか?

  • Visual Basic5.0でファイルの取得

    VBの初心者です。 今、VisualBasic5.0を使って、UNIXの中のCSVファイルを取ってくるというプログラムを作っています。 API関数を使って取ってくることができるのは確認済みなのですが、できればAPI関数を使わずに取得したいのです。 VBhelpの中で使えそうなオブジェクトや関数など探してみたのですが、直接ファイルを取得するようなものは見つかりませんでした。 VB5.0を使ってプログラムを作るという条件があるので、最新のVB6.0の方でできるのかどうかは調べていません。 わかられる方がおられましたら、よろしくお願いします。

専門家に質問してみよう