Προς το περιεχόμενο

Εύρεση αρχείων


HaPagan

Προτεινόμενες αναρτήσεις

Φτιάχνοντας ένα πρόγραμμα σε Visual Basic μου προέκυψε ένα πρόβλημα.Το πρόβλημα , λοιπόν , αυτό είναι ότι θέλω το πρόγραμμα να κάνει έρευνα του σκληρού δίσκου για κάποιο συγκεκριμμένο είδος αρχείου.

 

π.χ.

----

Εύρεση αρχείων με κατάληξη mp3.

 

Μήπως ξέρει κανείς πώς μπορεί να γίνει κάτι τέτοιο;

 

ΥΓ.Έρευνα για διάφορα αρχεία , όχι για κάποιο συγκεκριμμένο!Δηλαδή να μην ορίζω εγώ το όνομα του αρχείου.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γεια χαρα , οσο αναφορα την VB 6 μπορεις να χρησιμοποιησεις τo FileSystemObject , και αντιστοιχα objects Folder , File , Drive .

 

Επισης υπαρχει λιγοτερο funcy τροπος και πιο αγαρπος , να χρησιμοποιησεις DirListBox , FileListBox , και να ψαχνεις τα διαφορα αρχεια φακελους .

 

Δεν ξερω αν βοηθησα, αν θελεις παραπανω βοηθεια.εδω ειμαστε

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ευχαριστώ για τις απαντήσεις σας.Αλλά αυτά που λέτε είναι κάπως δύσχρηστα για το πρόγραμμα που θέλω.Για να εξηγηθώ , με τον τρόπο που προτείνεται θα πρέπει να ορίζω εγώ κάθε φορά το directory έρευνας , ενώ θα προτιμούσα αν ήταν αφικτό να ερευνά όλα τα directories και subdirectories ενός σκληρού δίσκου.

 

Ελπίζω τώρα να έκανα πιο σαφές το πρόβλημα που αντιμετοπίζω.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

εδω θα πρεπει να γραψεις και εσυ λιγο κωδικα...

Με ενα DriveListBox μπορεις να παρεις ολα τα Drive και αντιστοιχα με ενα DirListBox ολα τα folder.

Για καθε φακελο , ψαχνεις ολα τα αρχεια , η χρησιμοποιεις καποιο pattern ή φιλτρο , αν βρεις κατι , φυλας το filename σε ενα array .Συνεχιζεις με τα υπολοιπα folders .

 

Η συγκεκριμενη υλοποιηση μπορει να γινει με recursion (αναδρομικη μεθοδο) η και σειριακα!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Λοιπόν , αρχικά προσπάθησα να βρω τον κώδικα ο οποίος θα διατρέχει όλους τους καταλόγους του σκληρού δίσκου.

 

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">Option Explicit

Public strMP3s(60), strFolders(500) As String [/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif"></font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">

Private Sub cmdListFolders_Click()

Dim a, b, k As Integer

 

'Counts the number of folders

b = Dir1.ListCount

l = b

 

'Saves the folders to the array strFolders

'and displays the saved folders to the list lstFolders

For a = 0 To b - 1

For k = 0 To l - 1

strFolders(k) = Dir1.List(k)

lstFolders.AddItem strFolders(k)

Next k

Dir1.Path = strFolders(a)

l = Dir1.ListCount

Next a

 

lblNoFolders.Caption = "Folders : " & lstFolders.ListCount

 

End Sub

[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Έχω ορίσει ως αρχικό κατάλογο έρευνας : c:\

 

Το θέμα είναι ότι δεν μου βρίσκει όλους τους καταλόγους.

 

<small>[ 29-06-2002, 17:05: Το μήνυμα επεξεργάστηκε από: HaPagan ]</small>

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το προβλημα ειναι οτι το Dir1. θα σου δωσει τα folder -subfolder του φακελου που εχει εκεινη τηνσ τιγμη το focus , που ειναι μαρκαρισμενος απο σενα!

Αν πας στην φορμα σου και κανεις πανω στο dirlistbox διπλο κλικ στην ριζα του drive (c:\) τοτε θα σου δωσει μονο την σωστη λιστα...γιαυτο ισως και η συγκεκριμενη προσεγγιση με αυτα τα Visual Components δεν ειναι και η πιο σωστη!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ευχαριστώ ρε παιδιά για την βοήθεια!

 

Φίλε Timiman , το βρήκα και εγώ αυτό το προγραμματάκι που μου πρότεινες (thanks).

 

Θα τα δοκιμάσω και βλέπουμε.

 

<img border="0" title="" alt="[smile]" src="images/icons/smile.gif" /> <img border="0" title="" alt="[smile]" src="images/icons/smile.gif" />

 

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">quote:</font><hr /><font size="2" face="Verdana, Helvetica, sans-serif"> Το προβλημα ειναι οτι το Dir1. θα σου δωσει τα folder -subfolder του φακελου που εχει εκεινη τηνσ τιγμη το focus , που ειναι μαρκαρισμενος απο σενα!

Αν πας στην φορμα σου και κανεις πανω στο dirlistbox διπλο κλικ στην ριζα του drive (c:\) τοτε θα σου δωσει μονο την σωστη λιστα...γιαυτο ισως και η συγκεκριμενη προσεγγιση με αυτα τα Visual Components δεν ειναι και η πιο σωστη!

</font><hr /></blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Φίλε apoc , το δοκίμασα αυτό που λες αλλά δυστυχώς δεν ισχύει κάτι τέτοιο.Έχω ορίσει στον κώδικα να ξεκινάει την έρευνα από την ρίζα οπότε δε νομίζω να φταίει κάτι τέτοιο.Ευχαριστώ πάντως!

 

<small>[ 02-07-2002, 14:51: Το μήνυμα επεξεργάστηκε από: HaPagan ]</small>

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επισκέπτης

Για τσέκαρε εδώ . Έχει έναν κώδικα για παρόμοια προσπάθεια. (το ζουμί της υπόθεσης είναι στο module .bas)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Apo to ligo pou eida ton kwdika sou (an kai prepei na pw oti se merika simeia den eimai kai toso sigouros gia to ti akrivws kanei) exw tin entipwsi oti xreiazetai akomi ena loop(for ,while ktl. nomizw den exei simasia). To loop tha prepei na mpei mallon se simeio prin paroun times ta b,l alla den eimai kai toso sigouros. Psaxe to ligo.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ean sas endiaferei mporeite na xreisimopoieisete api.

 

FindFirstFile, FindFirstFileEx, FindNextFile kai FindClose.

 

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fileref_4qcl.a sp

 

episis dio paradigmata ena me findfirstfile:

 

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> Sub FilesSearch(DrivePath As String, Ext As String)

 

Dim XDir() As String

Dim TmpDir As String

Dim FFound As String

Dim DirCount As Integer

Dim X As Integer

' 'Initialises Variables

DirCount = 0

ReDim XDir(0) As String

XDir(DirCount) = ""

 

If Right(DrivePath, 1) <> "\" Then

DrivePath = DrivePath & "\"

End If

 

' 'Enter here the code for showing the path being

' 'search. Example: Form1.label2 = DrivePath

' 'Search for all directories and store in the

' 'XDir() variable

 

DoEvents

TmpDir = Dir(DrivePath, vbDirectory)

 

Do While TmpDir <> ""

 

If TmpDir <> "." And TmpDir <> ".." Then

 

If (GetAttr(DrivePath & TmpDir) And vbDirectory) = vbDirectory Then

XDir(DirCount) = DrivePath & TmpDir & "\"

DirCount = DirCount + 1

ReDim Preserve XDir(DirCount) As String

End If

 

End If

 

TmpDir = Dir

Loop

 

' 'Searches for the files given by extension Ext

FFound = Dir(DrivePath & Ext)

 

Do Until FFound = ""

' 'Code in here for the actions of the files found.

' 'Files found stored in the variable FFound.

' 'Example: Form1.list1.AddItem DrivePath & FFound

FFound = Dir

Loop

 

' 'Recursive searches through all sub directories

 

For X = 0 To (UBound(XDir) - 1)

FilesSearch XDir(X), Ext

Next X

 

End Sub[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">kai

 

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> 'Add a command button named Command1, four text boxes named Text1,

'Text2, Text3 and Text4 and a list box to Form1.

'Module Declarations

Declare Function FindFirstFile Lib "kernel32" Alias _

"FindFirstFileA" (ByVal lpFileName As String, lpFindFileData _

As WIN32_FIND_DATA) As Long

 

Declare Function FindNextFile Lib "kernel32" Alias _

"FindNextFileA" (ByVal hFindFile As Long, _

lpFindFileData As WIN32_FIND_DATA) As Long

 

Declare Function GetFileAttributes Lib "kernel32" Alias _

"GetFileAttributesA" (ByVal lpFileName As String) As Long

 

Declare Function FindClose Lib "kernel32" (ByVal hFindFile _

As Long) As Long

 

Public Const MAX_PATH = 260

Public Const MAXDWORD = &HFFFF

Public Const INVALID_HANDLE_VALUE = -1

Public Const FILE_ATTRIBUTE_ARCHIVE = &H20

Public Const FILE_ATTRIBUTE_DIRECTORY = &H10

Public Const FILE_ATTRIBUTE_HIDDEN = &H2

Public Const FILE_ATTRIBUTE_NORMAL = &H80

Public Const FILE_ATTRIBUTE_READONLY = &H1

Public Const FILE_ATTRIBUTE_SYSTEM = &H4

Public Const FILE_ATTRIBUTE_TEMPORARY = &H100

 

Type FILETIME

dwLowDateTime As Long

dwHighDateTime As Long

End Type

 

Type WIN32_FIND_DATA

dwFileAttributes As Long

ftCreationTime As FILETIME

ftLastAccessTime As FILETIME

ftLastWriteTime As FILETIME

nFileSizeHigh As Long

nFileSizeLow As Long

dwReserved0 As Long

dwReserved1 As Long

cFileName As String * MAX_PATH

cAlternate As String * 14

End Type

 

Public Function StripNulls(OriginalStr As String) As String

 

If (InStr(OriginalStr, Chr(0)) > 0) Then

OriginalStr = Left(OriginalStr, _

InStr(OriginalStr, Chr(0)) - 1)

End If

 

StripNulls = OriginalStr

 

End Function

 

'Copy the following code into Form1's module:

 

Option Explicit

 

Function FindFilesAPI(path As String, SearchStr As String, _

FileCount As Integer, DirCount As Integer)

 

Dim FileName As String ' Walking filename variable...

Dim DirName As String ' SubDirectory Name

Dim dirNames() As String ' Buffer for directory name entries

Dim nDir As Integer ' Number of directories in this path

Dim i As Integer ' For-loop counter...

Dim hSearch As Long ' Search Handle

Dim WFD As WIN32_FIND_DATA

Dim Cont As Integer

 

If Right(path, 1) <> "\" Then path = path & "\"

 

' Search for subdirectories.

nDir = 0

ReDim dirNames(nDir)

Cont = True

hSearch = FindFirstFile(path & "*", WFD)

If hSearch <> INVALID_HANDLE_VALUE Then

Do While Cont

DirName = StripNulls(WFD.cFileName)

'Ignore the current and encompassing directories.

If (DirName <> ".") And (DirName <> "..") Then

'Check for directory with bitwise comparison.

If GetFileAttributes(path & DirName) And _

FILE_ATTRIBUTE_DIRECTORY Then

dirNames(nDir) = DirName

DirCount = DirCount + 1

nDir = nDir + 1

ReDim Preserve dirNames(nDir)

End If

End If

Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.

Loop

Cont = FindClose(hSearch)

End If

 

'Walk through this directory and sum file sizes.

 

hSearch = FindFirstFile(path & SearchStr, WFD)

Cont = True

 

If hSearch <> INVALID_HANDLE_VALUE Then

While Cont

FileName = StripNulls(WFD.cFileName)

If (FileName <> ".") And (FileName <> "..") Then

FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * _

MAXDWORD) + WFD.nFileSizeLow

FileCount = FileCount + 1

List1.AddItem path & FileName

End If

Cont = FindNextFile(hSearch, WFD) ' Get next file

Wend

Cont = FindClose(hSearch)

End If

 

'If there are sub-directories...

 

If nDir > 0 Then

'Recursively walk into them...

For i = 0 To nDir - 1

FindFilesAPI = FindFilesAPI + FindFilesAPI(path & _

dirNames(i) & "\", SearchStr, FileCount, DirCount)

Next i

End If

 

End Function

 

Private Sub Command1_Click()

 

Dim SearchPath As String, FindStr As String

Dim FileSize As Long

Dim NumFiles As Integer, NumDirs As Integer

Screen.MousePointer = vbHourglass

List1.Clear

SearchPath = Text1.Text

FindStr = Text2.Text

FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)

Text3.Text = NumFiles & " Files found in " & NumDirs + 1 & _

" Directories"

Text4.Text = "Size of files found under " & SearchPath & " = " & _

Format(FileSize, "#,###,###,##0") & " Bytes"

Screen.MousePointer = vbDefault

End Sub

 

'Enter a starting path into Text1, a search string in Text2

'(like *.* or *.txt) and then click Command1.[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">

 

<small>[ 05-07-2002, 15:18: Το μήνυμα επεξεργάστηκε από: damn3 ]</small>

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...