DOBON.NET DOBON.NETプログラミング掲示板過去ログ

条件付きフォルダファイルのコピー方法

環境/言語:[ Windows 7 VB]
分類:[.NET]

はじめて投稿させていただきます。
VBについては初心者レベルですが、質問させていただきます。
長文&乱文ですがよろしくお願いします。
条件にあったテキストファイルを指定した場所にコピーするという
プログラムを作りたいと考えています(ファイル数は10,000件以上)。
具体的にはフォーム上に検索するフォルダとコピー先のフォルダを
指定するTextBoxとファイルの更新日付の期間を指定するTextBoxを
それぞれ設けて条件を指定後に検索し、条件に合ったファイルだけコピーしようと
考えております。
ここまでなら何とか自力でできそうなのですが、問題がありまして
検索するフォルダにはサブフォルダがありその中に同名のファイルがあるため、
そのフォルダ名をコピー先に作りその中にコピーしたいと考えております。
(コピー元と同じ階層にして、その中に条件にあったファイルだけをコピーしたいです)
またこの作成したソフトを別のパソコン(WindowsXP)で使用したいのですが、
非力の為、あまり負荷のかからないようにしたいと考えております。
どうかご教授の程、よろしくお願いします。
2013/10/06(Sun) 11:21:51 編集(投稿者)

■No31845に返信(素人ですさんの記事)
> ここまでなら何とか自力でできそうなのですが、問題がありまして
> 検索するフォルダにはサブフォルダがありその中に同名のファイルがあるため、
> そのフォルダ名をコピー先に作りその中にコピーしたいと考えております。
> (コピー元と同じ階層にして、その中に条件にあったファイルだけをコピーしたいです)

フォルダーの中のファイルを列挙する(ファイル名を順に挙げていく・見ていく)ことはできるのですよね?
それを応用して、フォルダーを列挙してそのフォルダーの中を調べるように再帰する、
ループするコードを書くことになります。


一例
Sub Main()
    EnumerateFiles("f:\tmp") ' 検索対象フォルダーは適当に変えてください
End Sub

Private Sub EnumerateFiles(ByVal targetFolder As String)
    Console.WriteLine("探しているフォルダー:" & targetFolder)
    Dim files As String() = Directory.GetFiles(targetFolder)
    For Each file In files
        ' ファイルに対する条件チェック
    Next

    Dim folders As String() = Directory.GetDirectories(targetFolder)
    For Each folder In folders
        ' フォルダーなので再帰する
        EnumerateFiles(Path.Combine(targetFolder, folder))
    Next

End Sub

または、GetFiles 第 3 引数で SearchOption.AllDirectories を指定することです。
最初のフォルダーとその下のフォルダーの検索結果が混ざっているので、うまく
フォルダーを作るべきかどうか判断できるように作らないといけません。


> またこの作成したソフトを別のパソコン(WindowsXP)で使用したいのですが、
> 非力の為、あまり負荷のかからないようにしたいと考えております。

何に対する負荷でしょうか?
どういった処理を作ろうとも、CPU の負荷よりもディスクアクセスの負荷が高いことは
避けられません。

ファイルの列挙、ディレクトリの列挙、ファイルのコピーと3つを考えると、
そこまで大きくディスクアクセス負荷を減らせないかもなぁと思っています。


> どうかご教授の程、よろしくお願いします。

こちらも読んでみてください。
http://blogs.wankuma.com/jeanne/archive/2005/11/24/19566.aspx
いろいろ丁寧に説明頂きありがとうございました。
やりたいことのイメージ(手法)がわかりましたので後は自力で
やってみます。
PCの非力の件につきましては、説明不足でした。
作ろうと思っているソフトの他に別のプログラムが動いており別プログラムの
処理を優先したい為、できるだけCPU等の負荷を軽減したいと思っていましたが
あまり変わらないとのことでしたので、まずこのソフトを作成してみて
影響がどの程度あるのか調べてみます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板