Søgning på hele Harddisken

Tags:    visual-basic

Hvordan kan jeg lave et program som scanner hele harddisken for en fil? Det skal være sådan at man kan bruge: filnavn.*

Håber i vil / kan hjælpe

Christian



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Det kode er godt, men det gør ikke rigtig det jeg gerne vil have det til. Det var mig der udtrykte mig forkert.

Det koden også skal kunne er: når man f. eks skriver: *.avi så skal den finde alle filer der har endelsen .avi

Jeg håber at du, Jan Toft, eller andre kan hjælpe. Det ville være rigtig lækkert hvis jeg kunne få det til at virke. Jeg er ikke så god til programmering endnu, men man lærer jo altid :)[Redigeret d. 04/07-02 19:51:34 af Christian Hansen]

JT

Jeg havde engentlig regnet med, at de sidste små tilpasninger kunne du selv have lavet ,men fordi det nu er dig så har jeg tilføjet en linje mere.

Option Explicit
Private Declare Function GetInputState Lib "user32" () As Long
Dim CancelSøgning As Boolean
Const StartSøg = "Start Søgning"
Const StopSøg = "Stop Søgning"
' for test lav en form med en Treeview control samt en 2 Textboxe og en CommandButton
' References : Microsoft Scripting Runtime
' controls : Microsoft Copmmon Control 6.0 (SP4)



Private Sub Command1_Click()

If Command1.Caption = StopSøg Then CancelSøgning = True
If Text2.Text <> "" And Command1.Caption = StartSøg Then
CancelSøgning = False
Command1.Caption = StopSøg
Call LoadTreeView("C:", True, UCase(Text2.Text))
Command1.Caption = StartSøg
MsgBox ("Søgning Færdig")
End If
End Sub


Private Sub LoadTreeView(strpath As String, FirstLoop As Boolean, Search As String)
Dim objFolder As Variant
Dim objFolders As Variant
Dim objFiles As Variant
Dim objFile As Variant
Dim objfso As Variant
Dim UserFilm As Node
Dim c As Integer
Dim names, SubNode As String
' On Error Resume Next: I tilfælde af SystemFolder
On Error Resume Next
Set objfso = New FileSystemObject

If FirstLoop = True Then
TreeView1.Nodes.Clear
' Set TreeView1.ImageList = ImageList1 ' bruges hvis man ønsker Iconer
TreeView1.Nodes.Add , , "Root", "Søger efter """ & Search & """"
' -----------Check for wildcards Du kan selv putte flere ind her hvis du ønsker----------------------------
If Left(Search, 2) = "*." Then Search = Mid(Search, 2)

' I stedet for instr(start,string1,string2,CompareMetod) kan man jo også bruge left(string,len) og right(string,len) og Mid(string,start,len)


End If
If GetInputState <> 0 Then DoEvents ' ser om keboard elle mus er blevet rørt
Set objFolders = objfso.GetFolder(strpath & "\\").SubFolders
'Finder folders
For Each objFolder In objFolders

' kan unlades hvis større hastighed ønskes ----------------------
Text1.Text = strpath & "\\" & objFolder.Name
DoEvents ' ønskes større hastig fjernes denne
' ---------------------------------------------------------------

c = InStr(1, UCase(objFolder.Name), Search, vbTextCompare)
If c > 0 Then
TreeView1.Nodes.Add "Root", tvwChild, strpath & "\\" & objFolder.Name, objFolder.Name ', FolderIcon
DoEvents ' ønskes større hastig fjernes denne
End If
' kalder sig selv for at gå dybere i fil strukturen (recursiv)
If FirstLoop = False Then TreeView1.Nodes(1).Expanded = True
Call LoadTreeView(strpath & "\\" & objFolder.Name, False, Search)
If CancelSøgning Then Exit Sub
'finder filer
Set objFiles = objfso.GetFolder(strpath & "\\" & objFolder.Name).Files
For Each objFile In objFiles
' kan unlades hvis større hastighed ønskes ----------------------
Text1.Text = strpath & "\\" & objFolder.Name & "\\" & objFile.Name
' DoEvents ' ønskes større hastig fjernes denne
'----------------------------------------------------------------
c = InStr(1, UCase(objFile.Name), Search, vbTextCompare)
If c > 0 Then
' gemmer resultatet i Treeview Control
TreeView1.Nodes.Add "Root", tvwChild, strpath & "\\" & objFolder.Name & "\\" & objFile.Name, objFile.Name ',FileIcon

DoEvents ' ønskes større hastig fjernes denne
End If
Next

Next

If FirstLoop = False Then
Set objFiles = objfso.GetFolder(strpath & "\\").Files
' finder filer i root folder
For Each objFile In objFiles
' kan unlades hvis større hastighed ønskes ----------------------
Text1.Text = strpath & "\\" & objFile.Name
DoEvents ' ønskes større hastig fjernes denne
' ---------------------------------------------------------------
c = InStr(1, UCase(objFile.Name), Search, vbTextCompare)
If c > 0 Then
' gemmer resultatet i Treeview Control
TreeView1.Nodes.Add "Root", tvwChild, strpath & "\\" & objFile.Name, objFile.Name ', FileIcon
'DoEvents ' ønskes større hastig fjernes denne
End If
Next
End If
End Sub

Private Sub Form_Load()
Dim a As Double
Command1.Caption = StartSøg
a = 3.141592654 * 2
End Sub

Private Sub TreeView1_Click()
Text1.Text = TreeView1.SelectedItem.Key ' Viser hele stien
End Sub




Hvordan kan jeg lave et program som scanner hele harddisken for en fil? Det skal være sådan at man kan bruge: filnavn.*

Håber i vil / kan hjælpe

Christian

JT
Option Explicit
Private Declare Function GetInputState Lib "user32" () As Long
Dim CancelSøgning As Boolean
Const StartSøg = "Start Søgning"
Const StopSøg = "Stop Søgning"
' for test lav en form med en Treeview control samt en 2 Textboxe og en CommandButton
' References : Microsoft Scripting Runtime
' controls : Microsoft Copmmon Control 6.0 (SP4)



Private Sub Command1_Click()

If Command1.Caption = StopSøg Then CancelSøgning = True
If Text2.Text <> "" And Command1.Caption = StartSøg Then
CancelSøgning = False
Command1.Caption = StopSøg
Call LoadTreeView("C:", True, UCase(Text2.Text))
Command1.Caption = StartSøg
MsgBox ("Søgning Færdig")
End If
End Sub


Private Sub LoadTreeView(strpath As String, FirstLoop As Boolean, Search As String)
Dim objFolder As Variant
Dim objFolders As Variant
Dim objFiles As Variant
Dim objFile As Variant
Dim objfso As Variant
Dim UserFilm As Node
Dim c As Integer
Dim names, SubNode As String
' On Error Resume Next: I tilfælde af SystemFolder
On Error Resume Next
Set objfso = New FileSystemObject

If FirstLoop = True Then
TreeView1.Nodes.Clear
' Set TreeView1.ImageList = ImageList1 ' bruges hvis man ønsker Iconer
TreeView1.Nodes.Add , , "Root", "Søger efter """ & Search & """"

End If
If GetInputState <> 0 Then DoEvents ' ser om keboard elle mus er blevet rørt
Set objFolders = objfso.GetFolder(strpath & "\\").SubFolders
'Finder folders
For Each objFolder In objFolders

' kan unlades hvis større hastighed ønskes ----------------------
Text1.Text = strpath & "\\" & objFolder.Name
' ---------------------------------------------------------------
c = InStr(1, UCase(objFolder.Name), Search, vbTextCompare)
If c > 0 Then
TreeView1.Nodes.Add "Root", tvwChild, strpath & "\\" & objFolder.Name, objFolder.Name ', FolderIcon
DoEvents ' ønskes større hastig fjernes denne
End If
' kalder sig selv for at gå dybere i fil strukturen (recursiv)
If FirstLoop = False Then TreeView1.Nodes(1).Expanded = True
Call LoadTreeView(strpath & "\\" & objFolder.Name, False, Search)
If CancelSøgning Then Exit Sub
'finder filer
Set objFiles = objfso.GetFolder(strpath & "\\" & objFolder.Name).Files
For Each objFile In objFiles
' kan unlades hvis større hastighed ønskes ----------------------
Text1.Text = strpath & "\\" & objFolder.Name & "\\" & objFile.Name
'----------------------------------------------------------------
c = InStr(1, UCase(objFile.Name), Search, vbTextCompare)
If c > 0 Then
' gemmer resultatet i Treeview Control
TreeView1.Nodes.Add "Root", tvwChild, strpath & "\\" & objFolder.Name & "\\" & objFile.Name, objFile.Name ',FileIcon

DoEvents ' ønskes større hastig fjernes denne
End If
Next

Next

If FirstLoop = False Then
Set objFiles = objfso.GetFolder(strpath & "\\").Files
' finder filer i root folder
For Each objFile In objFiles
' kan unlades hvis større hastighed ønskes ----------------------
Text1.Text = strpath & "\\" & objFile.Name
' ---------------------------------------------------------------
c = InStr(1, UCase(objFile.Name), Search, vbTextCompare)
If c > 0 Then
' gemmer resultatet i Treeview Control
TreeView1.Nodes.Add "Root", tvwChild, strpath & "\\" & objFile.Name, objFile.Name ', FileIcon
DoEvents ' ønskes større hastig fjernes denne
End If
Next
End If
End Sub

Private Sub Form_Load()
Command1.Caption = StartSøg
End Sub

Private Sub TreeView1_Click()
Text1.Text = TreeView1.SelectedItem.Key ' Viser hele stien
End Sub




Det kode er godt, men det gør ikke rigtig det jeg gerne vil have det til. Det var mig der udtrykte mig forkert.

Det koden også skal kunne er: når man f. eks skriver: *.avi så skal den finde alle filer der har endelsen .avi

Jeg håber at du, Jan Toft, eller andre kan hjælpe. Det ville være rigtig lækkert hvis jeg kunne få det til at virke. Jeg er ikke så god til programmering endnu, men man lærer jo altid :)[Redigeret d. 04/07-02 19:51:34 af Christian Hansen]



den kommer med en compile error i linien

Set objfso = New FileSystemObject

men der det fordi, jeg kørrer vb 6.0 ??

kan du ikke hjælpe mig, for jeg vil meget gerne bruge det..

Hilsen Majbritt



Weeeeee! Det var lige hvad jeg søgte efter! Er nemlig ved at lave en Affalds fjerner (Fjerner logs,txt,zero-byte-filer,mm. :D).

Meeen....Kan det laves sådan at jeg kan søge med disse parametre?

*.log;*.txt;*.tmp;*.html;*.htm ??????????????

Med Venlig Hilsen
Morten Torndahl Pedersen



Pleeeeaaaasseeeeeeee! Jeg er desperat! :'(

Med Venlig Hilsen
Morten Torndahl Pedersen



t