RosettaCodeData/Task/Find-duplicate-files/FreeBASIC/find-duplicate-files.basic

74 lines
1.8 KiB
Plaintext

#include "dir.bi"
Type infoarchv
tamano As Longint
nombre As String
End Type
Sub sortFiles(files() As infoarchv)
Dim As Integer i, j, n = Ubound(files)
For i = 0 To n-1
For j = i+1 To n
If files(j).tamano < files(i).tamano Then
Swap files(i), files(j)
Elseif files(j).tamano = files(i).tamano Then
If files(j).nombre < files(i).nombre Then Swap files(i), files(j)
End If
Next j
Next i
End Sub
' Main program
Dim As String d
Line Input "Enter directory to search (leave blank for current directory): ", d
If d = "" Then d = Curdir
If Chdir(d) <> 0 Then Print "Could not change directory: "; d : End
Redim As String dirlist(0)
Dim As Integer i, cntarchv = 0
Dim As String cad = Dir("*", fbNormal)
While cad <> ""
Redim Preserve dirlist(cntarchv)
dirlist(cntarchv) = cad
cntarchv += 1
cad = Dir()
Wend
Dim As infoarchv files()
Redim files(cntarchv-1)
For i = 0 To cntarchv-1
Dim As Long f = Freefile
If Open(dirlist(i) For Binary Access Read As #f) = 0 Then
files(i).tamano = Lof(f)
files(i).nombre = dirlist(i)
Close #f
Else
files(i).tamano = -1
files(i).nombre = dirlist(i)
End If
Next
Print !"\nDirectory : "; d
Print String(40, "-")
sortFiles(files())
Dim As Boolean linea = False
For i = 0 To cntarchv-2
If files(i).tamano = files(i+1).tamano And files(i).tamano >= 0 Then
Print files(i).tamano; " "; files(i).nombre
Print files(i+1).tamano; " "; files(i+1).nombre
If i < cntarchv-2 Andalso files(i+1).tamano <> files(i+2).tamano Then linea = True
Else
linea = False
End If
If linea Then
Print String(40, "-")
linea = False
End If
Next
Sleep