初めまして。
タイトルの通り、入力先のルートフォルダ以下の階層で
再帰処理を行いたいのですが、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
他人任せになってしまい、申し訳ないのですが、
どうか宜しくお願い致します。
とりあえず、VCといってもいろんなやり方があるので、
どのプロジェクトでやるのか明記してください。
例1)Windows XP SP2/Visual Studio2005 Windows フォーム アプリケーション
例2)Windows 2000 SP4/Visual C++ 6.0 MFC Application
再起処理はスタックとかの構造を理解していないと簡単にハングアップしてしまいますので、本当に初心者レベルならあまりお勧めしません。またVBで作れるなら無理にVCで作る必要も無い気がします。
それを踏まえた上でどうしても必要なら以下が参考になるはずです。
http://www.geocities.co.jp/SiliconValley/2642/
みるもさんも書かれていますが、
再帰処理に限らずですが、C/C++言語の知識が全くないのであれば、
止めた方がよいのではと思います。
言語知識の勉強をしてでもVCで書きたいというのであれば、
まずは言語の文法から勉強してきてください。
サンプルソースを書いてもらっても言語知識無しでは理解できないでしょうし、
理解できないで丸写しで使ってもメンテナンスできないでしょう?
サンプルソースにしたって動作保障して出すようなものではありませんから
最終的には自分でデバッグしなくてはなりません。
そういう意味では言語の知識は必須であり、知識無しでなんとかなるものではありません。
みなさん、お返事遅れてすみません。
>Blueさん
Windows XP SP2/Visual Studio.net 2003です。
プロジェクトは、Adobeから提供されているサンプルプロジェクトで、
ビルドするとapiが作成されるものです。
>みるもさん、PATIOさん
仕事上の都合で、Adobeのサンプルプロジェクトを、
ファイルを単一処理から複数処理するようにいじらなければ
ならなくなって、そのプロジェクトがC++だったため、
ちょっとどうしてもC++で書かなければならなくなったのです。
だからといって、すぐに聞くのは安易でした。
PATIOさんの言うとおり、文法の勉強をして出直してきます。
みなさん、有難うございました。
また質問させていただくかもしれませんので、
その時はまた宜しくお願いします。
ツイート | ![]() |