2012-04-26 18 views
0

フォルダ内のすべてのファイル(C:\ Folder1など)を別のフォルダ(C:\ Folder2など)に移動するには、 、しかしFolder1を削除しないで移動されたアイテムの数を取得して、私に説明させてください。VB内のフォルダを削除するのではなく、フォルダ内のすべてのファイルを移動する

Folder1(ファイル、フォルダ、サブフォルダ、サブファイルなど)内のすべてのアイテムをディレクトリ構造を維持しながら移動する必要がありますが、Folder1を削除せずに、フォルダとファイル数移動した(フォルダ数とファイル数のみ)。

誰でも助けてくれますか? ありがとうございます。

+0

(何もチェックは行われません)....先のフォルダは、ソースフォルダ内にすることはできません、注意してくださいこのように

numMoved = moveDirectoryContent("C:\temp", "C:\temp2") 

を呼び出しますしかし、オリジナルを削除しないで、あなたは動いていない、あなたはコピーしています。 –

+0

私はファイルとフォルダを私にしようとしていますが、ファイルとフォルダが含まれているものは削除しません。@ Steveで解決しました – Minion

答えて

1

この再帰的なprocを試すことができます。

Public Shared Function moveDirectoryContent(srcDir As String, destDir As String) as Integer 
    Dim countFile As Integer = 0 
    If (Not Directory.Exists(destDir)) Then 
     Directory.CreateDirectory(destDir) 
    End If 
    Dim listFiles() As String = Directory.GetFileSystemEntries(srcDir) 
    Dim curFile As String 

    For Each curFile In listFiles 
     If Directory.Exists(curFile) Then 
      countFile = countFile + moveDirectoryContent(curFile, Path.Combine(destDir, Path.GetFileName(curFile))) 
     Else 
      Dim dstFile = Path.Combine(destDir, Path.GetFileName(curFile)) 
      If File.Exists(dstFile) Then 
       dstFile = GetUniqueName(dstFile) 
      End If 
      File.Copy(curFile, dstFile) 
      File.Delete(curFile) 
      countFile = countFile + 1 
     End If 
    Next 
    Return countFile 
End Function 


Public Shared Function GetUniqueName(srcFile as String) as String 
    Dim uFile As String = Path.GetFileNameWithoutExtension(srcFile) 
    Dim ext as String = Path.GetExtension(srcFile) 
    Dim cnt As Integer = 0 
    Dim uniqueText = string.Format("_{0}_00", DateTime.ToDay.ToString("yyyy_MM_dd")) 
    While(File.Exists(uFile + uniqueText + ext)) 
     cnt = cnt + 1 
     uniqueText = string.Format("_{0}_{1:D2}", DateTime.ToDay.ToString("yyyy_MM_dd"), cnt) 
    End While 
    Return Path.GetDirectoryName(srcFile) + "\" + uFile + uniqueText + ext 
End Function 

と、ファイルやフォルダを移動する場合

+0

ファイルを上書きしない方法はありますか?上書きは存在しますが、ファイル内ではなく、ポイントはフォルダを結合しますが、ファイルを上書きしません。名前を変更して移動しますか? – Minion

+1

答えが更新され、既に存在するファイルを削除するインストール先フォルダ内に一意のファイルを生成する新しいメソッドが追加されました。 – Steve

+0

この関数は見つかりませんでした: "countFile = countFile + moveDirectory(curFile、Path.Combine(destDir、Path.GetFileName(curFile)))"私はこのために変更する必要があると思います: "moveDirectoryContent"ファイルは運命のフォルダの中に存在する場合は動作しません、それを削除するだけですか? – Minion

関連する問題