VB.net console application for Deleting old files from a particular folder

How are you guys? Happy New Year! We were quite busy and quiet during last few weeks. Here we are once again, coming up with a simple, yet powerful utility which could make a system administrator’s life bit easier.

We have a 12 years old Oracle database server with oracle data folder residing in D:\ drive with less than 20GB total free space where we do a full export everyday by late night.

Each full export (.dmp) file is almost 5GB, thus occupying the entire 20GB by every forth day. We were painfully following up the schedules and deleting the files to preserve much valued disk space.

Well, finally we decided to write a small console application to handle this task through a scheduled task. You can download the entire solution from following link

The executable could be downloaded from following link

We developed this solution using Visual Studio Express for Desktop, ie, akka free version of VS 2012. You may need to download the same, so that you can open the solution.

However, to make stuff easier, we are copying the module1.vb code over here

Imports System.Console
Imports System.IO
Imports System
Imports System.Collections.Generic
Imports System.Configuration
Imports System.Text
Imports System.Environment




Module Module1


Sub Main()
Dim strStartupArguments() As String, intCount As Integer
Dim fldrName As String, fileType As String, nDays As Integer

strStartupArguments = System.Environment.GetCommandLineArgs
For intCount = 0 To UBound(strStartupArguments)
' Console.WriteLine(strStartupArguments(intCount).ToLower)
' Console.WriteLine(strStartupArguments(intCount))
Select Case strStartupArguments(intCount).ToLower
Case "-dfolder"
' fldrName = strStartupArguments(intCount).ToLower
fldrName = strStartupArguments(intCount + 1)
'Console.WriteLine(fldrName)
Case "-ftype"
fileType = strStartupArguments(intCount + 1)
'Console.WriteLine(fileType)
Case "-ndays"
nDays = strStartupArguments(intCount + 1)
End Select
Next intCount

If ((fldrName Is Nothing) Or (fileType Is Nothing) Or (nDays = 0)) Then
Console.WriteLine("No or not all arguments given, USAGE DeleteOldFiles.exe -dFolder <folder name> -fType <*.extention> -nDays <N> ")
Console.WriteLine("Example: DeleteOldFiles.exe -dFolder C:\myfolder -fType *.txt -nDays 100")
Console.WriteLine(" C:\myfolder --is the target folder from files will be deleted")
Console.WriteLine(" *.txt --tells the system what kind of files should be deleted ")
Console.WriteLine(" 100 --defines file age in number of days")
End
End If

Dim fileName = Date.Now.ToString("ddMMyyyy") & ".log"
Dim filePath = IO.Path.Combine(fldrName, fileName)
Using sw As StreamWriter = New StreamWriter(filePath)
sw.WriteLine("File Name" + ";" + "Creation Date" + ";" + "Deletion Time")
Try
' For Each file As IO.FileInfo In New IO.DirectoryInfo("D:\Documents").GetFiles("*.pdf")
For Each file As IO.FileInfo In New IO.DirectoryInfo(fldrName).GetFiles(fileType)
' Console.WriteLine((Now - file.CreationTime))
Console.WriteLine(file.Name)
If file.IsReadOnly = False Then
If (Now - file.CreationTime).Days >= nDays Then
sw.WriteLine(file.Name + ";" + file.CreationTime + ";" + Now)
file.Delete()
Else
Console.WriteLine(file.Name + " Was Created later")
End If
End If


Next
Catch ex As Exception
Console.WriteLine(ex.ToString)
End Try
End Using


End Sub

End Module

The default solution name is “DeleteOldFiles” hence when you open and build the solution, the .exe file name would be DeleteOldFiles.exe

Usage syntax

DeleteOldFiles.exe –dFolder <driverletter:\foldername> –fType *.extension –nDays <number of days>

eg: DeleteOldFiles.exe –dFolder C:\temp –fType *.tmp –nDays 3

Now you can schedule a job, and let this small piece of application doing the cleanup job for you

Yes, it does a logging for you :), so that you can always check which files were deleted from the folder (for eg: C\temp). The log file location will be the same folder from which the files were permanently deleted.

Tested on Windows Server 2003, Windows 8 64Bit, Windows 2008 Server

regards,

admin