Удаление файлов и папок созданных в 2012 году - VB

Узнай цену своей работы

Формулировка задачи:

на форме поле текстовое поле( вводим необходимый год, за который будем удалять файлы и папки) и кнопка "Удалить". необходимо удалить все файлы и папки, созданные в определенном году. Год вводиться пользователем с клавиатуры. как это возможно осуществить?

Решение задачи: «Удаление файлов и папок созданных в 2012 году»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. ' Задайте папку для удаления из нее файлов за указанный год
  4. Const SrcFolder As String = "c:\temp"
  5.  
  6. Private Const MAX_PATH As Long = 260&
  7.  
  8. Private Type FILETIME
  9.     dwLowDateTime As Long
  10.     dwHighDateTime As Long
  11. End Type
  12. Private Type WIN32_FIND_DATA
  13.     dwFileAttributes As Long
  14.     ftCreationTime As FILETIME
  15.     ftLastAccessTime As FILETIME
  16.     ftLastWriteTime As FILETIME
  17.     nFileSizeHigh As Long
  18.     nFileSizeLow As Long
  19.     dwReserved0 As Long
  20.     dwReserved1 As Long
  21.     lpszFileName(MAX_PATH) As Integer
  22.     lpszAlternate(14) As Integer
  23. End Type
  24. Private Type SYSTEMTIME
  25.     wYear As Integer
  26.     wMonth As Integer
  27.     wDayOfWeek As Integer
  28.     wDay As Integer
  29.     wHour As Integer
  30.     wMinute As Integer
  31.     wSecond As Integer
  32.     wMilliseconds As Integer
  33. End Type
  34.  
  35. 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
  36. Private Declare Function GetFileTime Lib "kernel32.dll" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
  37. Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
  38. Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
  39. Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileW" (ByVal lpFileName As Long, lpFindFileData As WIN32_FIND_DATA) As Long
  40. Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileW" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
  41. Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
  42. Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenW" (ByVal lpString As Long) As Long
  43. Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyW" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long
  44. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  45. Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileW" (ByVal lpFileName As Long) As Long
  46. Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesW" (ByVal lpFileName As Long, ByVal dwFileAttributes As Long) As Long
  47.  
  48. Private Const INVALID_HANDLE_VALUE      As Long = -1
  49. Private Const FILE_ATTRIBUTE_NORMAL     As Long = &H80&
  50. Dim lWatchYear As Long
  51.  
  52. Private Sub Form_Load()
  53.     Dim sWatchYear As String
  54.     sWatchYear = InputBox("Введите искомый год создания файлов для их удаления из папки: " & SrcFolder)
  55.     If StrPtr(sWatchYear) <> 0 Then
  56.         lWatchYear = CLng(sWatchYear)
  57.         ScanFolder SrcFolder
  58.     End If
  59. End Sub
  60.  
  61. Sub ScanFolder(Path As String)
  62.     On Error Resume Next
  63.     Dim SubPathName     As String
  64.     Dim PathName        As String
  65.     Dim hFind           As Long
  66.     Dim L               As Long
  67.     Dim lRet            As Long
  68.     Dim lpStr           As Long
  69.     Dim fd              As WIN32_FIND_DATA
  70.    
  71.     Do
  72.         If hFind <> 0 Then
  73.             If FindNextFile(hFind, fd) = 0 Then FindClose hFind: hFind = 0: Exit Sub
  74.         Else
  75.             hFind = FindFirstFile(StrPtr(Path & "\*"), fd)
  76.             If hFind = INVALID_HANDLE_VALUE Then Exit Sub
  77.         End If
  78.        
  79.         L = fd.dwFileAttributes And &H600 ' мимо симлинков
  80.        Do While L
  81.             If FindNextFile(hFind, fd) = 0 Then FindClose hFind: hFind = 0: Exit Sub
  82.             L = fd.dwFileAttributes And &H600
  83.         Loop
  84.    
  85.         If hFind <> 0 Then
  86.             lpStr = VarPtr(fd.dwReserved1) + 4
  87.             L = lstrlen(lpStr)
  88.             PathName = String$(L, vbNullChar)
  89.             lRet = StrPtr(PathName)
  90.             lstrcpy lRet, lpStr
  91.             SubPathName = Path & "\" & PathName
  92.        
  93.             If fd.dwFileAttributes And vbDirectory Then
  94.                 If PathName <> "." Then
  95.                     If PathName <> ".." Then
  96.                         DoEvents
  97.                         ScanFolder SubPathName
  98.                     End If
  99.                 End If
  100.             Else
  101.                 If lWatchYear = Year(GetFileCreationDate(SubPathName)) Then
  102.                     SetFileAttributes StrPtr(SubPathName), FILE_ATTRIBUTE_NORMAL  'Файл не удалится, пока не снимешь ReadOnly
  103.                    If DeleteFile(StrPtr(SubPathName)) Then
  104.                         Debug.Print "[ OK ] Delete Success: " & SubPathName
  105.                     Else
  106.                         Debug.Print "[FAIL] Delete Failed: " & SubPathName & ". Code = " & Err.LastDllError
  107.                     End If
  108.                 End If
  109.             End If
  110.         End If
  111.        
  112.     Loop While hFind
  113. End Sub
  114.  
  115. Function GetFileCreationDate(file As String) As Date
  116.     Const FILE_FLAG_SEQUENTIAL_SCAN As Long = &H8000000
  117.     Const FILE_FLAG_NO_BUFFERING    As Long = &H20000000
  118.     Const FILE_SHARE_READ           As Long = &H1&
  119.     Const FILE_SHARE_WRITE          As Long = &H2&
  120.     Const OPEN_EXISTING             As Long = 3&
  121.  
  122.     Dim hFile       As Long
  123.     Dim ctime       As FILETIME
  124.     Dim atime       As FILETIME
  125.     Dim wtime       As FILETIME
  126.     Dim ftime       As SYSTEMTIME
  127.    
  128.     hFile = CreateFile(StrPtr(file), ByVal 0&, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, _
  129.         FILE_FLAG_NO_BUFFERING Or FILE_FLAG_SEQUENTIAL_SCAN, ByVal 0&)
  130.            
  131.     If hFile <> INVALID_HANDLE_VALUE Then
  132.         GetFileTime hFile, ctime, atime, wtime
  133.         FileTimeToLocalFileTime ctime, ctime
  134.         FileTimeToSystemTime ctime, ftime
  135.         GetFileCreationDate = DateSerial(ftime.wYear, ftime.wMonth, ftime.wDay) + TimeSerial(ftime.wHour, ftime.wMinute, ftime.wSecond)
  136.         CloseHandle hFile
  137.     End If
  138. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут