Записать имена всех файлов, их размер и местоположение на дисках C:D - VB
Формулировка задачи:
Пример такой
текстовый файл
Курсовая.doc (5Мб) C:\Desktop\work\курсовая.doc
и таким образом все файлы
Как реализовать?
Решение задачи: «Записать имена всех файлов, их размер и местоположение на дисках C:D»
textual
Листинг программы
- ' Поиск файлов на дисках, в папках и подпапках
- Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
- Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
- Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
- Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
- Const MAX_PATH = 260
- Const MAXDWORD = &HFFFF
- Const INVALID_HANDLE_VALUE = -1
- Const FILE_ATTRIBUTE_ARCHIVE = &H20
- Const FILE_ATTRIBUTE_DIRECTORY = &H10
- Const FILE_ATTRIBUTE_HIDDEN = &H2
- Const FILE_ATTRIBUTE_NORMAL = &H80
- Const FILE_ATTRIBUTE_READONLY = &H1
- Const FILE_ATTRIBUTE_SYSTEM = &H4
- Const FILE_ATTRIBUTE_TEMPORARY = &H100
- Private Type FILETIME
- dwLowDateTime As Long
- dwHighDateTime As Long
- End Type
- Private 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
- 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
- Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
- Dim FileName As String
- Dim DirName As String
- Dim dirNames() As String
- Dim nDir As Integer
- Dim i As Integer
- Dim hSearch As Long
- Dim WFD As WIN32_FIND_DATA
- Dim Cont As Integer
- Dim LenF As Double
- If Right(path, 1) <> "\" Then path = path & "\"
- nDir = 0
- ReDim dirNames(nDir)
- Cont = True
- hSearch = FindFirstFile(path & "*", WFD)
- If hSearch <> INVALID_HANDLE_VALUE Then
- Do While Cont
- DirName = StripNulls(WFD.cFileName)
- If (DirName <> ".") And (DirName <> "..") Then
- 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.
- DoEvents
- Loop
- Cont = FindClose(hSearch)
- End If
- 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
- LenF = Round((FileLen(path & FileName)) / 1024, 2)
- List1.AddItem Str(LenF) & " КБ " & path & FileName
- End If
- Cont = FindNextFile(hSearch, WFD) ' Get next file
- Wend
- Cont = FindClose(hSearch)
- End If
- If nDir > 0 Then
- For i = 0 To nDir - 1
- FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
- Next i
- End If
- End Function
- 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)
- Screen.MousePointer = vbDefault
- End Sub
- Private Sub Form_Load()
- Text1.Text = "C:\"
- Text2.Text = "*.*"
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д