Удаление файлов и папок созданных в 2012 году - VB
Формулировка задачи:
на форме поле текстовое поле( вводим необходимый год, за который будем удалять файлы и папки) и кнопка "Удалить".
необходимо удалить все файлы и папки, созданные в определенном году. Год вводиться пользователем с клавиатуры.
как это возможно осуществить?
Решение задачи: «Удаление файлов и папок созданных в 2012 году»
textual
Листинг программы
- Option Explicit
- ' Задайте папку для удаления из нее файлов за указанный год
- Const SrcFolder As String = "c:\temp"
- Private Const MAX_PATH As Long = 260&
- 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
- lpszFileName(MAX_PATH) As Integer
- lpszAlternate(14) As Integer
- End Type
- Private Type SYSTEMTIME
- wYear As Integer
- wMonth As Integer
- wDayOfWeek As Integer
- wDay As Integer
- wHour As Integer
- wMinute As Integer
- wSecond As Integer
- wMilliseconds As Integer
- End Type
- Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileW" (ByVal lpFileName As Long, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
- Private Declare Function GetFileTime Lib "kernel32.dll" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
- Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
- Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
- Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileW" (ByVal lpFileName As Long, lpFindFileData As WIN32_FIND_DATA) As Long
- Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileW" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
- Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
- Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenW" (ByVal lpString As Long) As Long
- Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyW" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long
- Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
- Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileW" (ByVal lpFileName As Long) As Long
- Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesW" (ByVal lpFileName As Long, ByVal dwFileAttributes As Long) As Long
- Private Const INVALID_HANDLE_VALUE As Long = -1
- Private Const FILE_ATTRIBUTE_NORMAL As Long = &H80&
- Dim lWatchYear As Long
- Private Sub Form_Load()
- Dim sWatchYear As String
- sWatchYear = InputBox("Введите искомый год создания файлов для их удаления из папки: " & SrcFolder)
- If StrPtr(sWatchYear) <> 0 Then
- lWatchYear = CLng(sWatchYear)
- ScanFolder SrcFolder
- End If
- End Sub
- Sub ScanFolder(Path As String)
- On Error Resume Next
- Dim SubPathName As String
- Dim PathName As String
- Dim hFind As Long
- Dim L As Long
- Dim lRet As Long
- Dim lpStr As Long
- Dim fd As WIN32_FIND_DATA
- Do
- If hFind <> 0 Then
- If FindNextFile(hFind, fd) = 0 Then FindClose hFind: hFind = 0: Exit Sub
- Else
- hFind = FindFirstFile(StrPtr(Path & "\*"), fd)
- If hFind = INVALID_HANDLE_VALUE Then Exit Sub
- End If
- L = fd.dwFileAttributes And &H600 ' мимо симлинков
- Do While L
- If FindNextFile(hFind, fd) = 0 Then FindClose hFind: hFind = 0: Exit Sub
- L = fd.dwFileAttributes And &H600
- Loop
- If hFind <> 0 Then
- lpStr = VarPtr(fd.dwReserved1) + 4
- L = lstrlen(lpStr)
- PathName = String$(L, vbNullChar)
- lRet = StrPtr(PathName)
- lstrcpy lRet, lpStr
- SubPathName = Path & "\" & PathName
- If fd.dwFileAttributes And vbDirectory Then
- If PathName <> "." Then
- If PathName <> ".." Then
- DoEvents
- ScanFolder SubPathName
- End If
- End If
- Else
- If lWatchYear = Year(GetFileCreationDate(SubPathName)) Then
- SetFileAttributes StrPtr(SubPathName), FILE_ATTRIBUTE_NORMAL 'Файл не удалится, пока не снимешь ReadOnly
- If DeleteFile(StrPtr(SubPathName)) Then
- Debug.Print "[ OK ] Delete Success: " & SubPathName
- Else
- Debug.Print "[FAIL] Delete Failed: " & SubPathName & ". Code = " & Err.LastDllError
- End If
- End If
- End If
- End If
- Loop While hFind
- End Sub
- Function GetFileCreationDate(file As String) As Date
- Const FILE_FLAG_SEQUENTIAL_SCAN As Long = &H8000000
- Const FILE_FLAG_NO_BUFFERING As Long = &H20000000
- Const FILE_SHARE_READ As Long = &H1&
- Const FILE_SHARE_WRITE As Long = &H2&
- Const OPEN_EXISTING As Long = 3&
- Dim hFile As Long
- Dim ctime As FILETIME
- Dim atime As FILETIME
- Dim wtime As FILETIME
- Dim ftime As SYSTEMTIME
- hFile = CreateFile(StrPtr(file), ByVal 0&, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, _
- FILE_FLAG_NO_BUFFERING Or FILE_FLAG_SEQUENTIAL_SCAN, ByVal 0&)
- If hFile <> INVALID_HANDLE_VALUE Then
- GetFileTime hFile, ctime, atime, wtime
- FileTimeToLocalFileTime ctime, ctime
- FileTimeToSystemTime ctime, ftime
- GetFileCreationDate = DateSerial(ftime.wYear, ftime.wMonth, ftime.wDay) + TimeSerial(ftime.wHour, ftime.wMinute, ftime.wSecond)
- CloseHandle hFile
- End If
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д