XK8ER
asked on
vb.net - moving duplicated files
Hello there,
I am using this code to create directories based on the date that the picture was taken. it looks for all of the images in a directory and then it moves them.
I have 2 directories with 500 images each, and two images are duplicates.. when I use the code bellow I get one error saying "cannot move the file already exists"
what I would like to do is to check its file size and overwrite if the same.. or if its different file size add a number at the end of the name..
I am using this code to create directories based on the date that the picture was taken. it looks for all of the images in a directory and then it moves them.
I have 2 directories with 500 images each, and two images are duplicates.. when I use the code bellow I get one error saying "cannot move the file already exists"
what I would like to do is to check its file size and overwrite if the same.. or if its different file size add a number at the end of the name..
Imports System.IO
Imports System.Text
Imports System.Drawing.Imaging
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If FolderBrowserDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
ProcessFiles(FolderBrowserDialog1.SelectedPath, "*.jpg")
End If
End Sub
Private Sub ProcessFiles(ByVal Folder As String, ByVal Pattern As String)
Dim di As New DirectoryInfo(Folder)
For Each fi As FileInfo In di.GetFiles(Pattern, SearchOption.AllDirectories)
Dim values() As String = FindDateTaken(fi.FullName).Split(":")
If values.Length >= 2 Then
values(2) = values(2).Split(" ")(0)
Try
Dim dt As New DateTime(values(0), values(1), values(2))
Dim SubDi As New DirectoryInfo(Path.Combine(di.FullName, dt.Year))
If Not SubDi.Exists() Then
SubDi.Create()
End If
SubDi = New DirectoryInfo(Path.Combine(SubDi.FullName, dt.Month.ToString("00")))
If Not SubDi.Exists() Then
SubDi.Create()
End If
SubDi = New DirectoryInfo(Path.Combine(SubDi.FullName, dt.Day.ToString("00")))
If Not SubDi.Exists() Then
SubDi.Create()
End If
Dim NewFileName As String = Path.Combine(SubDi.FullName, fi.Name)
fi.MoveTo(NewFileName)
Catch ex As Exception
End Try
End If
Next
End Sub
Private Function FindDateTaken(ByVal strPicture As String) As String
Const DATE_TAKEN As Integer = &H9003
Dim dateTaken As String = ""
Using img As Image = Image.FromFile(strPicture)
If img.PropertyIdList.Contains(DATE_TAKEN) Then
Dim pitem As PropertyItem = img.GetPropertyItem(DATE_TAKEN)
dateTaken = Encoding.UTF8.GetString(pitem.Value, 0, pitem.Value.Length)
End If
End Using
Return dateTaken
End Function
End Class
ASKER
ok, but how exactly do I do that?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Then Do something with the file or just exit the try catch.
With being in the for next loop it should continue to the next file.