HaPagan Δημοσ. 28 Ιουνίου 2002 Δημοσ. 28 Ιουνίου 2002 Φτιάχνοντας ένα πρόγραμμα σε Visual Basic μου προέκυψε ένα πρόβλημα.Το πρόβλημα , λοιπόν , αυτό είναι ότι θέλω το πρόγραμμα να κάνει έρευνα του σκληρού δίσκου για κάποιο συγκεκριμμένο είδος αρχείου. π.χ. ---- Εύρεση αρχείων με κατάληξη mp3. Μήπως ξέρει κανείς πώς μπορεί να γίνει κάτι τέτοιο; ΥΓ.Έρευνα για διάφορα αρχεία , όχι για κάποιο συγκεκριμμένο!Δηλαδή να μην ορίζω εγώ το όνομα του αρχείου.
apoc Δημοσ. 29 Ιουνίου 2002 Δημοσ. 29 Ιουνίου 2002 Γεια χαρα , οσο αναφορα την VB 6 μπορεις να χρησιμοποιησεις τo FileSystemObject , και αντιστοιχα objects Folder , File , Drive . Επισης υπαρχει λιγοτερο funcy τροπος και πιο αγαρπος , να χρησιμοποιησεις DirListBox , FileListBox , και να ψαχνεις τα διαφορα αρχεια φακελους . Δεν ξερω αν βοηθησα, αν θελεις παραπανω βοηθεια.εδω ειμαστε
Mihos_Gr Δημοσ. 29 Ιουνίου 2002 Δημοσ. 29 Ιουνίου 2002 Dhmiourgeis na parapanw pou anefere o apoc kai apla sto file1 sta properties exei ena pedio onomati pattern, ekei vazeis *.mp3 kai eisai etoimos....
HaPagan Δημοσ. 29 Ιουνίου 2002 Μέλος Δημοσ. 29 Ιουνίου 2002 Ευχαριστώ για τις απαντήσεις σας.Αλλά αυτά που λέτε είναι κάπως δύσχρηστα για το πρόγραμμα που θέλω.Για να εξηγηθώ , με τον τρόπο που προτείνεται θα πρέπει να ορίζω εγώ κάθε φορά το directory έρευνας , ενώ θα προτιμούσα αν ήταν αφικτό να ερευνά όλα τα directories και subdirectories ενός σκληρού δίσκου. Ελπίζω τώρα να έκανα πιο σαφές το πρόβλημα που αντιμετοπίζω.
apoc Δημοσ. 29 Ιουνίου 2002 Δημοσ. 29 Ιουνίου 2002 εδω θα πρεπει να γραψεις και εσυ λιγο κωδικα... Με ενα DriveListBox μπορεις να παρεις ολα τα Drive και αντιστοιχα με ενα DirListBox ολα τα folder. Για καθε φακελο , ψαχνεις ολα τα αρχεια , η χρησιμοποιεις καποιο pattern ή φιλτρο , αν βρεις κατι , φυλας το filename σε ενα array .Συνεχιζεις με τα υπολοιπα folders . Η συγκεκριμενη υλοποιηση μπορει να γινει με recursion (αναδρομικη μεθοδο) η και σειριακα!
HaPagan Δημοσ. 29 Ιουνίου 2002 Μέλος Δημοσ. 29 Ιουνίου 2002 Ευχαριστώ φίλε Apoc!Θα το δοκιμάσω και αν αντιμετωπίσω καμιά δυσκολία , θα επανέλθω με ερώτηση!
HaPagan Δημοσ. 30 Ιουνίου 2002 Μέλος Δημοσ. 30 Ιουνίου 2002 Λοιπόν , αρχικά προσπάθησα να βρω τον κώδικα ο οποίος θα διατρέχει όλους τους καταλόγους του σκληρού δίσκου. </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>
apoc Δημοσ. 2 Ιουλίου 2002 Δημοσ. 2 Ιουλίου 2002 Το προβλημα ειναι οτι το Dir1. θα σου δωσει τα folder -subfolder του φακελου που εχει εκεινη τηνσ τιγμη το focus , που ειναι μαρκαρισμενος απο σενα! Αν πας στην φορμα σου και κανεις πανω στο dirlistbox διπλο κλικ στην ριζα του drive (c:\) τοτε θα σου δωσει μονο την σωστη λιστα...γιαυτο ισως και η συγκεκριμενη προσεγγιση με αυτα τα Visual Components δεν ειναι και η πιο σωστη!
HaPagan Δημοσ. 2 Ιουλίου 2002 Μέλος Δημοσ. 2 Ιουλίου 2002 Ευχαριστώ ρε παιδιά για την βοήθεια! Φίλε 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>
Dvs Δημοσ. 2 Ιουλίου 2002 Δημοσ. 2 Ιουλίου 2002 O kodikas pou theleis iparxei etoimos (ton eixa psaxei & vrei prin arketo kairo epeidi eixa akrivos to idio provlima me sena - den mou epsaxne se olous tous katalogous). Telika ton eixa kanei me anadromi
HaPagan Δημοσ. 3 Ιουλίου 2002 Μέλος Δημοσ. 3 Ιουλίου 2002 Φίλε Dvs , τι εννοείς ότι υπάρχει έτοιμος;Τον έχει δηλαδή η Visual Basic σε κάποιο sample ;
HaPagan Δημοσ. 3 Ιουλίου 2002 Μέλος Δημοσ. 3 Ιουλίου 2002 Ρε παιδιά , δεν έχει κάποιος καμία ιδέα για το τι να διορθώσω;
Επισκέπτης Δημοσ. 3 Ιουλίου 2002 Δημοσ. 3 Ιουλίου 2002 Για τσέκαρε εδώ . Έχει έναν κώδικα για παρόμοια προσπάθεια. (το ζουμί της υπόθεσης είναι στο module .bas)
giannis2001 Δημοσ. 5 Ιουλίου 2002 Δημοσ. 5 Ιουλίου 2002 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.
damn3 Δημοσ. 5 Ιουλίου 2002 Δημοσ. 5 Ιουλίου 2002 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>
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.