ルート以下のフォルダで再帰処理がしたい

解決


taku  2006-11-15 05:26:00  No: 63607

初めまして。

タイトルの通り、入力先のルートフォルダ以下の階層で
再帰処理を行いたいのですが、C/C++は今まで全く書いたことが
なく、途方に暮れています。

とりあえず、このような処理がしたい、というのをVBAで書いては
みたのですが、どのようにC/C++で書けばよいかわからないので、
どなたかお教えいただけないでしょうか?

ちなみに、作成したVBAはこのような感じです。

Option Explicit
    'グローバル変数
    Dim fso As FileSystemObject
    Dim inputDirPath As String
    Dim outputDirPath As String

Public Sub wordFinderProc()
    Dim rootFolder As Folder

    Set fso = CreateObject("Scripting.FileSystemObject")

    'ここでのディレクトリパスは、本番ではフォルダ選択ダイアログで
    '選択したフォルダのパスが入るようにできればしたい。
    '今はテストなので、決めうち。
    inputDirPath = "Z:\pdfFulltextFiles\yuho"
    outputDirPath = "S:\pdfTextFiles\yuho"
    Set rootFolder = fso.GetFolder(inputDirPath)

    recurseTransactionProc rootFolder.SubFolders
    
    Set fso = Nothing

End Sub

'ルートフォルダ以下を、再帰的に処理
Public Sub recurseTransactionProc(targetFolders As Folders)
    Dim targetFolder As Folder

    For Each targetFolder In targetFolders
        'テキスト抽出ファイル作成先にフォルダがなければ、ここで作成する
        If fso.FolderExists(Replace(targetFolder.Path, inputDirPath, outputDirPath)) = False Then
            fso.CreateFolder Replace(targetFolder.Path, inputDirPath, outputDirPath)
        End If

        'フォルダの中のファイルの有無を判別
        If targetFolder.Files.Count > 0 Then
            'PDFファイルの処理へ
            createTxtFileProc targetFolder.Files
        Else
            '下の階層へ
            recurseTransactionProc targetFolder.SubFolders
        End If
    Next
End Sub

'PDFファイルの処理
Public Sub createTxtFileProc(targetPdfFiles As Files)
    Dim targetPdfFile As File

    For Each targetPdfFile In targetPdfFiles
        If InStr(1, targetPdfFile.Name, ".pdf") > 0 Then
            'もしPDFファイルなら、PDFファイルの処理を行う
        End If
    Next
End Sub

他人任せになってしまい、申し訳ないのですが、
どうか宜しくお願い致します。


Blue  2006-11-15 05:42:48  No: 63608

とりあえず、VCといってもいろんなやり方があるので、
どのプロジェクトでやるのか明記してください。

例1)Windows XP SP2/Visual Studio2005 Windows フォーム アプリケーション
例2)Windows 2000 SP4/Visual C++ 6.0 MFC Application


みるも  2006-11-15 05:57:15  No: 63609

再起処理はスタックとかの構造を理解していないと簡単にハングアップしてしまいますので、本当に初心者レベルならあまりお勧めしません。またVBで作れるなら無理にVCで作る必要も無い気がします。

それを踏まえた上でどうしても必要なら以下が参考になるはずです。
http://www.geocities.co.jp/SiliconValley/2642/


PATIO  2006-11-15 18:53:46  No: 63610

みるもさんも書かれていますが、
再帰処理に限らずですが、C/C++言語の知識が全くないのであれば、
止めた方がよいのではと思います。
言語知識の勉強をしてでもVCで書きたいというのであれば、
まずは言語の文法から勉強してきてください。
サンプルソースを書いてもらっても言語知識無しでは理解できないでしょうし、
理解できないで丸写しで使ってもメンテナンスできないでしょう?
サンプルソースにしたって動作保障して出すようなものではありませんから
最終的には自分でデバッグしなくてはなりません。
そういう意味では言語の知識は必須であり、知識無しでなんとかなるものではありません。


taku  2006-11-15 20:12:37  No: 63611

みなさん、お返事遅れてすみません。

>Blueさん
Windows XP SP2/Visual Studio.net 2003です。
プロジェクトは、Adobeから提供されているサンプルプロジェクトで、
ビルドするとapiが作成されるものです。

>みるもさん、PATIOさん
仕事上の都合で、Adobeのサンプルプロジェクトを、
ファイルを単一処理から複数処理するようにいじらなければ
ならなくなって、そのプロジェクトがC++だったため、
ちょっとどうしてもC++で書かなければならなくなったのです。

だからといって、すぐに聞くのは安易でした。
PATIOさんの言うとおり、文法の勉強をして出直してきます。

みなさん、有難うございました。
また質問させていただくかもしれませんので、
その時はまた宜しくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加