2012-03-06 6 views
0

下のルートフォルダをすべて削除したいe:\ trichy.rootフォルダには、e:¥trichy¥chn¥20008¥20204 * .mp3ファイルのようなサブフォルダも含まれています。 plsは私を助けます。常にエラーが発生します。vb.netを使用しているサブフォルダの下のフォルダ

Dim rootfolder1 As FileInfo 
    rootfolder1 = txtRootFolder.Text 

    Try 
     If Directory.Exists(rootfolder1) Then 

      Dim files() As String = Directory.GetDirectories(rootfolder1) 
      For Each file As String In files 
       Dim fi As FileInfo = New FileInfo(file) 
       If (fi.LastAccessTime < DateTime.Now.AddMonths(-3)) Then 
        fi.Delete() 
        display_status("files are deleted successfully") 
       End If 
      Next 
     End If 
    Catch ex As Exception 
     display_status("Error in file deletion" & ex.Message) 
    End Try 

plsサブフォルダの下のこのルートフォルダの下にあるファイルを削除できますか?

+0

? – FosterZ

+2

エラーの詳細を投稿しなかったのはなぜですか?私たちは推測すべきでしょうか? – Oded

答えて

0

指定されたディレクトリを削除し、指定されている場合は、そのディレクトリ内のサブディレクトリとファイルを削除します。

Directory.Delete(Path1, true) 

MSDN

+0

しかし、彼は3ヶ月以上のファイルだけを削除したいと考えています。 –

+0

彼の質問のタイトルは混乱していました。「私はルートフォルダの下にあるすべてのものを削除したい」と言いました。 – FosterZ

0

Directory.GetDirectories戻り、すべてのサブディレクトリ。次に、そこからオブジェクトFileInfoを作成しています。

私はあなたがDirectory.GetFilesを使用する必要があるよりも、あなたが代わりにそのフォルダ内のファイルを削除することを前提としています

Dim files() As String = Directory.GetFiles(rootfolder1) 
For Each file As String In files 
    Dim fi As FileInfo = New FileInfo(file) 
    If (fi.LastAccessTime < DateTime.Now.AddMonths(-3)) Then 
     fi.Delete() 
    End If 
Next 
display_status("files are deleted successfully") 

あなたは再帰的にすべてのサブフォルダ内のすべてのファイルを削除する場合:

Public Shared Sub ProcessDirectory(ByVal targetDirectory As String) 
    Dim fileEntries As String() = Directory.GetFiles(targetDirectory) 
    Dim fileName As String 
    For Each fileName In fileEntries 
     Dim fi As FileInfo = New FileInfo(fileName) 
     If (fi.LastAccessTime < DateTime.Now.AddMonths(-3)) Then 
      fi.Delete() 
     End If 
    Next fileName 

    Dim subdirectoryEntries As String() = Directory.GetDirectories(targetDirectory) 
    ' Recurse into subdirectories of this directory. 
    Dim subdirectory As String 
    For Each subdirectory In subdirectoryEntries 
     ProcessDirectory(subdirectory) 
    Next subdirectory 
End Sub 

あなたはそれを呼び出します。

ProcessDirectory(rootfolder1) 
1

あなたがたFileInfoオブジェを必要としません全くcts。私はテストしていませんが、それは不必要な無駄やリソースであり、パフォーマンス面では高価かもしれません。

はこれを試してみてください:

Private Sub DeleteOldFiles(ByVal rootFolder As String, ByVal uptoDate As Date, Optional ByVal fileTypes As String = "*.*") 
    Try 
     If Directory.Exists(rootFolder) Then 
      Dim files() As String = Directory.GetFiles(rootFolder, fileTypes, SearchOption.AllDirectories) 
      For Each f As String In files 
       If File.GetLastAccessTime(f) <= uptoDate Then 
        File.Delete(f) 
       End If 
      Next 
     End If 
     display_status("files are deleted successfully") 
    Catch ex As Exception 
     display_status("Error in file deletion" & ex.Message) 
    End Try 
End Sub 

使用法:あなたがgeting何のエラー

DeleteOldFiles(txtRootFolder.Text, Now.AddMonths(-3), "*.mp3") 
関連する問題